2012-08-13 16 views
5

A modo de ejemplo:¿Cómo trata jQuery.ready() una llamada a sí mismo?

$(function(){ 
    //do stuff 
    $(function(){ 
     //do other stuff 
    }); 
}); 

Por supuesto escrita en código de esto parece no tener sentido. Pero un complemento que funciona con elementos HTML puede usar .ready() mientras se está ejecutando en un elemento en el archivo .ready() del script principal. ¿Cómo maneja jQuery esto exactamente? Claramente funciona, pero ¿hace algo especial?

Respuesta

2

Si se llama a .ready() después de que el DOM se haya inicializado, el nuevo manejador pasado se ejecutará inmediatamente.

Esto significa que cuando se ejecuta la primera función, el interno se ejecutará inmediatamente

Además, jQuery le permite enlazar múltiples funciones a un solo evento y se llamará a todos ellos (suponiendo que no hay uno produce un error)

puede probar el comportamiento mediante la ejecución de la página ya cargada:

jQuery(document).ready(function(){ 
     for(i=0;i<1000000;i++); 
     console.log('2'); 
    }); 
console.log('1'); 
+1

¿es "inmediatamente" como en _synchronously_ (antes de 'ready()' regresa)? – nnnnnn

+0

Sí, es sincrónico. Puede probar ejecutar esto en la página ya cargada: jQuery (documento) .ready (function() {for (i = 0; i <1000000; i ++) {;}; console.log ('2');}); console.log ('1'); –

+0

Obtengo esto: 'global .ready() START, 0ms; global .ready() END, 8ms; plugin. ready()() START, 11 ms; plugin .ready() END, 12ms'. El resultado es constante si llamo al plugin al inicio o al final de la .ready global. Por lo tanto, la llamada actual dentro del complemento parece cola después de la ejecución ya ejecutada. – Armatus

Cuestiones relacionadas