2010-07-15 12 views
120

Was ist der Unterschied zwischen diesen beiden?jQuery document.ready vs. selbstrufende anonyme Funktion

  1. $(document).ready(function(){ ... });

  2. (function(){ ... })();

Sind diese beide zugleich aufgerufenen Funktionen? Ich weiß, document.ready wird ausgelöst werden, wenn die gesamte HTML-Seite vom Browser gerendert wird, aber was ist mit der 2. Funktion (anonyme selbstständige Funktion). Warten Sie, bis der Browser das Rendern der Seite abgeschlossen hat oder wenn sie aufgerufen wird?

+15

Für das, was es wert ist, '$ (function() {});' entspricht '$ (document) .ready (function() {});' –

+1

Die Selbst anonyme Funktion aufgerufen wird ausgeführt wann immer es angetroffen wird. Auch das Rendern des Dokuments auf dem Bildschirm und das Erstellen des Objektmodells im Speicher sind nicht miteinander verknüpft. – Anurag

+0

verwandt: [Warum anonyme Funktion definieren und übergeben Sie jQuery als Argument?] (Http://Stackoverflow.com/q/10371539/1048572) auf welches Muster mit Backbone – Bergi

Antwort

15

document.ready ausführen, nachdem DOM "konstruiert" wurde. Selbstaufrufende Funktionen werden sofort ausgeführt - wenn sie in eingefügt werden, bevor DOM erstellt wird.

+5

+1, um einem unnötigen Downvote entgegenzuwirken. Es gibt jedoch ein kleines Problem in Ihrer Antwort. Die selbstaufrufende Funktion wird überall dort ausgeführt, wo sie beim Parsen gefunden wird, und muss nicht unbedingt innerhalb der '' liegen, und die Regeln sind nicht anders, nachdem das ursprüngliche DOM erstellt wurde. – Anurag

41

(function(){...})(); wird ausgeführt, sobald es im Javascript gefunden wird.

$(document).ready() wird ausgeführt, sobald das Dokument geladen ist. $(function(){...}); ist eine Abkürzung für $(document).ready() und macht genau dasselbe.

106
  • $(document).ready(function(){ ... });oder kurz$(function(){...});

    Diese Funktion wird aufgerufen, wenn die DOM is ready was bedeutet, Sie Abfrage Elemente zum Beispiel beginnen. .ready() wird verschiedene Möglichkeiten auf verschiedenen Browsern verwenden, um sicherzustellen, dass das DOM wirklich bereit ist.

  • (function(){ ... })();

    , die nichts anderes ist als eine Funktion ist, dass selbst so schnell wie möglich aufruft, wenn der Browser Ihre ecma-/javascript interpretiert. Daher ist es sehr unwahrscheinlich, dass Sie hier erfolgreich auf DOM elements handeln können.

+3

@phpGeek Sie sind das Gegenteil von rechts – NimChimpsky

+1

@NimChimpsky Ich verwirrt (Funktion() {}); mit $ (function() {}). Du bist das Gegenteil des Falschen;) – ALH

+0

Ich bin verwirrt, in Bezug auf '(function() {...})();' läuft kein JS Code so schnell wie möglich? Wenn Sie gesagt hätten, ein "Alarm()" innerhalb der SIAF oder außerhalb davon wäre der Effekt nicht der gleiche? – skube

23
  1. $(document).ready(function() { ... }); bindet einfach diese Funktion dem ready Ereignis des Dokuments, so, wie Sie gesagt haben, wenn das Dokument geladen wird, löst das Ereignis.

  2. (function($) { ... })(jQuery); ist eigentlich ein Konstrukt von Javascript, und all das Stück Code tut, ist das Objekt in jQueryfunction($) als Parameter übergeben und führt die Funktion, so dass innerhalb dieser Funktion, $ immer auf das Objekt jQuery bezieht. Dies kann helfen, Konflikte zu lösen Namensräume usw.

So # 1 ausgeführt wird, wenn das Dokument geladen wird, während 2 # sofort ausgeführt wird, mit dem jQuery Objekt $ als Kürzel benannt.

18

Der folgende Code wird ausgeführt, wenn das DOM (Dokumentobjektmodell) für die Ausführung von JavaScript-Code bereit ist.

$(document).ready(function(){ 
    // Write code here 
}); 

Die kurze Hand für den obigen Code ist:

$(function(){ 
    // write code here 
}); 

Der folgende Code ist ein selbst Aufruf anonyme JavaScript-Funktion gezeigt, und sobald Browser interpretiert ausgeführt werden:

(function(){ 
    //write code here 
})(); // It is the parenthesis here that call the function. 

die jQuery Selbst Aufrufe Funktion unten, so geht das globale jQuery Objekt als Argument zu function($) gezeigt . Dadurch kann $ lokal in der selbstaufrufenden Funktion verwendet werden, ohne zu benötigen, um den globalen Gültigkeitsbereich für eine Definition zu durchlaufen. jQuery ist nicht die einzige Bibliothek, die $ verwendet, so dass diese mögliche Namenskonflikte reduziert.

(function($){ 
    //some code 
})(jQuery); 
+2

Sehr einfache, klare und prägnante Erklärung von JavaScript-Verschlüsse. –

Verwandte Themen