Ich habe nach Informationen über sofort aufgerufene Funktionen gesucht und bin irgendwo auf diese Notation gestoßen:
+function(){console.log("Something.")}()
Kann mir jemand erklären, was das +
Zeichen vor der Funktion bedeutet / tut?
Ich habe nach Informationen über sofort aufgerufene Funktionen gesucht und bin irgendwo auf diese Notation gestoßen:
+function(){console.log("Something.")}()
Kann mir jemand erklären, was das +
Zeichen vor der Funktion bedeutet / tut?
Antworten:
Es zwingt den Parser, den folgenden Teil +
als Ausdruck zu behandeln . Dies wird normalerweise für Funktionen verwendet, die sofort aufgerufen werden, z.
+function() { console.log("Foo!"); }();
Ohne die +
dort, wenn der Parser in einem Zustand ist , wo es eine Erklärung erwartet (die einen Ausdruck oder mehrere nicht-Ausdruck Aussagen sein kann), das Wort function
sieht aus wie der Anfang einer Funktion Erklärung statt einer Funktion Ausdruck und so das ()
es folgende (die am Ende der obigen Zeile) wäre ein Syntaxfehler (ebenso wie das Fehlen eines Namens in diesem Beispiel). Mit dem +
wird es zu einem Funktionsausdruck, was bedeutet, dass der Name optional ist und zu einem Verweis auf die Funktion führt, der aufgerufen werden kann, sodass die Klammern gültig sind.
+
ist nur eine der Optionen. Es kann auch sein -
, !
, ~
, oder einfach über jeden anderen unären Operator. Alternativ können Sie Klammern verwenden (dies ist häufiger, aber syntaktisch weder mehr noch weniger korrekt):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
Die Tochtergesellschaft der Antwort von @ TJCrowder +
wird normalerweise verwendet, um das numerische Umwandeln eines Werts zu erzwingen, wie in dieser SO-Antwort erläutert . In diesem Fall wird es als "unärer Plus-Operator" bezeichnet (zur Erleichterung des Googelns).
var num = +variant;
Vor einer Funktion kann dies eine Möglichkeit sein, die Interpretation des Funktionsergebnisses als Zahl zu erzwingen. Ich bezweifle, dass dies noch passiert, aber theoretisch könnte die JIT dies verwenden, um die Funktion als reine numerische Funktion usw. zu kompilieren. Um jedoch zu verhindern, dass das unäre Plus eine Verkettung darstellt, wenn es in einem größeren Ausdruck verwendet wird, benötigen Sie Klammern:
blah + (+(function(){ var scope; return "4"; })());
(+function() { ... })()
Notation kann niemals fehlerfrei ausgeführt werden (abgesehen davon, dass dies die Frage nicht beantwortet).
3++function...
dies nicht dasselbe ist.
+function...
sich unnötig. Es kann das gleiche Ergebnis erzielt werden, bei blah + function( ){ ... }( );
dem die Notwendigkeit der Umhüllungsklammern entfällt.
Die kurze Antwort lautet also, dass ein Syntaxfehler verhindert wird, indem die Funktionsergebnisse auf die eine oder andere Weise verwendet werden.
Sie können die Engine auch über den void
Operator anweisen, dass Sie nicht einmal am Rückgabewert interessiert sind:
void function() { console.log("Foo!"); }();
Diesem Zweck dient natürlich auch das Anbringen von Zahnspangen.