2012-08-13 7 views
5

Als Beispiel:Wie behandelt jQuery.ready() einen Anruf an sich selbst?

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

Natürlich in Code geschrieben dies scheint keinen Sinn zu machen. Aber ein Plugin, das mit HTML-Elementen arbeitet, kann .ready() verwenden, während es selbst auf einem Element im .ready() des Hauptskriptes ausgeführt wird. Wie geht jQuery genau damit um? Es funktioniert klar, aber macht es etwas Besonderes?

Antwort

2

Wenn .ready() aufgerufen wird, nachdem das DOM initialisiert wurde, wird der übergebene neue -Handler sofort ausgeführt.

Dies bedeutet, dass, wenn die erste Funktion ausgeführt wird, wird der innere sofort

Zusätzlich ausgeführt werden, ermöglicht jQuery Sie mehrere Funktionen auf einem einzigen Ereignis zu binden, und es wird, dass keine sie alle (vorausgesetzt, rufen man erzeugt einen Fehler)

Sie das Verhalten durch die Ausführung auf bereits geladene Seite testen:

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

Ist es "sofort" wie in _synchronously_ (vor '.ready()' Returns)? – nnnnnn

+0

Ja, es ist synchron. Sie können die Ausführung auf bereits geladener Seite testen: jQuery (Dokument) .ready (function() {für (i = 0; i <1000000; i ++) {;}; console.log ('2');}); console.log ('1'); –

+0

Ich bekomme das: 'global .ready() START, 0ms; global .ready() ENDE, 8ms; plugin .ready()() START, 11ms; plugin .ready() END, 12ms'. Das Ergebnis ist konstant, egal ob ich das Plugin am Anfang oder am Ende der globalen .ready aufruft. Somit scheint sich der ready-Aufruf innerhalb des Plugins nach dem bereits ausgeführten .ready, von dem es aufgerufen wird, in die Warteschlange zu stellen – Armatus

Verwandte Themen