Die erste ist in der Tat ein abgekürztes für $(document).ready()
, wie gezeigt here.
Aber die zweite ist sofort-aufgerufenen Funktionsausdruck (IIFE), eine anonyme Funktion, die deklariert und sofort aufgerufen wird.
In der Tat, die korrekte Syntax (das Argument in Ihrem Beispiel fehlt) ist:
(function($) {
//my $ object is local now
})(jQuery);
In diesem Fall sind Sie die anonyme Funktion mit einem Argument aufgerufen wird.
Der Hauptvorteil dieses Musters (IIFE) ist: isolieren Code (Sie so viele Variablen erstellen können, wie Sie wollen, und es wird Umfang, wenn Sie etwas zurück in Ihre anonyme Funktion eingeschränkt werden). Dieses Muster wird verwendet, um "private" und "public" Methoden zu definieren. Wie folgt aus:
var myModule = (function() {
function privateFunction() { console.log("I can't be accessed from outside :("; }
var privateVar = "me too :(";
function publicFunction() { console.log("Hey! I'm here!"; }
/* expose what you want */
return {
publicFunction: publicFunction
}
})();
myModule.publicFunction(); //Hey! I'm here!
myModule.privateFunction(); //undefined;
Sie können nennen es auch Modul Muster.
In Ihrem zweiten Beispiel rufen Sie die kürzlich erstellte anonyme Funktion mit einem Argument auf, und Ihre anonyme Funktion erhält dieses Argument. Dies ist ein Weg Abhängigkeit Injektion.
Auf diese Weise bearbeiten Sie Ihre globale Variable innerhalb der Funktion als lokal. Beachten Sie, dass wir im ersten Beispiel ein Objekt jQuery
übergeben und es in Ihrer Funktion als $
manipulieren. Es ist schwieriger, jemanden das jQuery-Objekt zu überschreiben, aber einige Skripts können das globale Dollar-Symbol neu zuweisen, besonders wenn Sie nicht die volle Kontrolle über Ihre App haben.Auf diese Weise passieren Sie immer das Objekt jQuery
und manipulieren es als $
.
Am Ende, lassen Sie mich packte einige andere Vorteile Liste Parameter auf einen IIFE der Weitergabe von here:
es schneller: JavaScript erste Lookup in den lokalen Bereich (vor klettern). Es kann die Leistung ein wenig verbessern.
hilft minification: minifier kann nun Variablen in Ihrem Umfang zu einem Ein-Buchstaben-Wort benennen, wodurch die Codegröße.
Als Randbemerkung, neige ich dazu zu (stark) vorziehen zu verwenden 'jQuery (function ($) {//...$ ist hier garantiert jQuery});' - das "no-conflict-safe" Dokument bereit. –
Das '(function() {console.log (" ready! ");}) ($)' Nimmt den Parameter $, tut aber nichts damit. –
Im zweiten Fall übergeben Sie Jquery-Instanz in anonyme Funktion (habe keine Ahnung warum). Es wird sofort ausgeführt. – degr