Unterschied zwischen foo () und function () {foo (); }

8

Gibt es einen Vorteil, eine Funktion mit einer anonymen Funktion zu umhüllen? Ich meine ein bestimmtes Beispiel:

%Vor%

und mit der eingepackten Funktion:

%Vor%

In beiden Fällen ist die Ausgabe identisch. Gibt es einen Unterschied? Die zweite Version ist, was ich gelernt habe, js. Ich erkenne, dass eine solche Form nützlich ist, wenn wir Schließungen brauchen, aber hier?

    
gvlax 19.10.2011, 13:32
quelle

3 Antworten

11

Das zweite Formular ermöglicht es Ihnen, Argumente an callback zu übergeben, während das erste Formular dies nicht tut.

%Vor%

Wenn Sie keine Argumente übergeben, ist es kein Vorteil, die Funktion zu übernehmen.

Um gründlicher zu sein, Function.prototype.bind kann uns bei der ersten Form helfen: %Vor%

Sie müssen diese Methode jedoch Browsern zur Verfügung stellen, die das Ereignis nicht unterstützen (Opera, Safari und IE 8, 7, 6). Der Code zum Shiming der Methode ist auf der MDN-Dokumentationsseite verfügbar.

    
Andy E 19.10.2011, 13:33
quelle
5

Durch das Umbrechen einer Funktion in einer anonymen Funktion können Komplikationen mit dem Schlüsselwort this vermieden werden. ( lese über sie auf quirksmode )

Zum Beispiel:

%Vor%

Das Umschließen einer Funktion in einer anonymen Funktion ist auch ein Schlüssel für die Verwendung von Closures in JavaScript:

%Vor%     
Richard JP Le Guen 19.10.2011 13:37
quelle
5

Wrapping ist nützlich, wenn Sie eine separate Identität benötigen.

%Vor%

Zum Beispiel funktionieren einige Funktionen wie addEventListener auf Identität.

%Vor%

Beim zweiten Aufruf von addEventListener heißt es: "Ich habe bereits ein beep ; ich muss kein weiteres hinzufügen." Wenn das Ereignis myEvent ausgelöst wird, erhalten Sie nur einen Piepton. Wenn Sie zwei Signaltöne möchten, müssen Sie sicherstellen, dass die Callbacks unterschiedlich sind.

%Vor%

Jede anonyme Funktion ist anders, also haben Sie dieses Mal zwei Funktionen registriert (die dasselbe tun). Jetzt piept es zweimal.

    
Raymond Chen 19.10.2011 14:26
quelle

Tags und Links