Anonymer Javascript-Funktionsaufruf [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Konstantin Lichter

Ich las JS-Quellen von Twitter – auf dem Weg, meine JS-Wissensbasis zu verbessern, als ich auf die seltsame Art stieß, anonyme Funktionen aufzurufen:

!function( $ ) {
    ...
}( window.jQuery );

… und das funktioniert! 🙂

Es ist für jeden offensichtlich, dass dies:

function ( $ ) { ... } ( window.jQuery )

funktioniert nicht (Syntaxfehler), obwohl dieser richtig ist:

(function ( $ ) { .... })( window.jQuery )

Kann mir bitte jemand diese Magie erklären (warum Fall mit !function funktioniert)?

  • Sehen benalman.com/news/2010/11/… für andere gültige IIFE-Muster.

    – Ates Goral

    1. Februar 2012 um 5:52 Uhr

  • @AtesGoral, danke, dieser Artikel ist sehr nützlich.

    – Konstantin Lichter

    1. Februar 2012 um 6:01 Uhr

Benutzer-Avatar
Felix Löther

Beim Stichwort function an einer Anweisungsposition (als erstes Token in einer Anweisung) getroffen wird, wird die Funktionsdeklaration als a ausgedrückt Funktionsanweisung. Funktionsanweisungen werden an die Spitze des Geltungsbereichs gehoben, können nicht sofort aufgerufen werden und müssen einen Namen haben.

Wenn das Schlüsselwort an einer Ausdrucksposition vorkommt (d. h. in Ihrem Beispiel nicht als erstes Token in einer Anweisung). ! das erste Token ist), wird die Funktionsdeklaration als a ausgedrückt Funktionsausdruck, die anonym sein kann und den Wert der neu erstellten Funktion zurückgibt. Da es den Wert der neu erstellten Funktion zurückgibt, können Sie es sofort aufrufen, indem Sie dahinter eine Klammer hinzufügen.

Das Einschließen der Deklaration in Klammern bewirkt dasselbe, ist aber häufiger als das Präfix a ! oder +:

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

  • Wahrscheinlich haben sie verwendet! anstatt es in () einzuschließen, weil es 50 % weniger Zeichen benötigt. 🙂 Weniger Umwege = schnellere Ladezeiten.

    – Jinglesthula

    13. Februar 2014 um 21:19 Uhr

Benutzer-Avatar
nimrodm

Die zweite Form function () {} ist ein Aussage. Das ! Operator wandelt dies in eine um Ausdruck. Sie werden auch Fälle finden, in denen Menschen verwenden - oder + Vor dem function Stichwort.

Wenn Sie einen Ausdruck haben, der zu einer Funktion ausgewertet wird, können Sie diese Funktion mithilfe von aufrufen () Operator.

Eine andere (vielleicht leichter verständliche) Möglichkeit, den gleichen Effekt zu erzielen, ist die Verwendung eines anderen Satzes von Klammern:

( function(x) { body; } )(arg);

Indem Sie die Funktion in die Klammer setzen, wandeln Sie sie wieder in einen Ausdruck um, der zu einer Funktion ausgewertet wird. Diese Funktion wird mit aufgerufen arg als Argument.

Als Pfeilfunktion:

( (x) => { body; } )(arg);

Soweit das Ausrufezeichen geht, ist das keine Zauberei. Es wandelt das Ergebnis in ein wahr/falsch um.

Ihr Problem kann sein, dass Ihre anonyme Funktion einen Fehler enthält.

  • Versuchen Sie einfach zu bewerten function (a) { alert(a); } (5); – Sie erhalten eine Fehlermeldung. Dann ersetzen function mit !function und versuche es noch mal. Beachten Sie auch, dass (function(a) { ... })(5) und (function(a) { ... }(5)) erfolgreich arbeiten.

    – Konstantin Lichter

    1. Februar 2012 um 5:50 Uhr


Benutzer-Avatar
Stein Zhong

das hört sich nach einem Javascript-Syntaxfehler an:

Eine benannte Funktion könnte jedoch eine Anweisung sein, eine anonyme Funktion betrachtet sie einfach als Ausdruck.

Pro: Sie können tun function() { ... }()

Nachteil: Sie können nicht function() { ... }

Aber warum sollten Leute eine anonyme Funktion definieren wollen, ohne sie aufzurufen? Der Nachteil ist also nicht wirklich ein Problem.

1048420cookie-checkAnonymer Javascript-Funktionsaufruf [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy