@AtesGoral, danke, dieser Artikel ist sehr nützlich.
– Konstantin Lichter
1. Februar 2012 um 6:01 Uhr
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
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
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.
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