Frage JavaScript Pluszeichen vor dem Funktionsnamen


Ich habe nach Informationen über selbstaufrufende Funktionen gesucht, und irgendwo bin ich auf diese Notation gestoßen:

+function(){}

Kann mir jemand erklären was das ist + Zeichen vor der Funktion bedeutet / tut?


777
2017-11-12 10:06


Ursprung


Antworten:


Er zwingt den Parser, den folgenden Teil zu behandeln + als Ausdruck. Dies wird normalerweise für Funktionen verwendet, die sofort aufgerufen werden, z.

+function() { console.log("Foo!"); }();

Ohne das + Wenn sich der Parser in einem Zustand befindet, in dem er eine Anweisung erwartet (die ein Ausdruck oder mehrere Nicht-Ausdruck-Anweisungen sein kann), wird das Wort angezeigt function sieht wie der Anfang einer Funktion aus Erklärung eher als eine Funktion Ausdruck und so die () danach (die am Ende der Zeile oben) wäre ein Syntaxfehler (wie das Fehlen eines Namens in diesem Beispiel). Mit das +, macht es zu einem Funktionsausdruck, was bedeutet, dass der Name optional ist und zu einem Verweis auf die Funktion führt, die aufgerufen werden kann, so dass die Klammern gültig sind.

+ ist nur eine der Optionen. Es kann auch sein -, !, ~oder irgendeinen anderen unären Operator. Alternativ können Sie Klammern verwenden (das ist häufiger, aber syntaktisch nicht mehr und nicht weniger korrekt):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());

1229
2017-11-12 10:07



Tochtergesellschaft der Antwort von @ TJCrowder, + wird normalerweise verwendet, um das numerische Umwandeln eines Werts zu erzwingen wie diese Antwort erklärt. In diesem Fall wird es als "unärer Plusoperator" bezeichnet (zum leichteren Durchsuchen).

var num = +variant;

So kann es vor einer Funktion sein, das Ergebnis der Funktion als Zahl zu interpretieren. Ich bezweifle, dass es noch passiert, aber theoretisch könnte das JIT das verwenden, um die Funktion als eine Nur-Zahlen-Funktion usw. zu kompilieren. Um zu verhindern, dass das unäre Plus eine Verkettung ist, wenn es in einem größeren Ausdruck verwendet wird, benötigen Sie Klammern:

blah + (+(function(){ var scope; return "4"; })());

84
2017-11-12 10:54



Die kurze Antwort ist also, dass es einen Syntaxfehler verhindert, indem die Funktionsergebnisse auf die eine oder andere Weise verwendet werden.

Sie können der Engine auch mitteilen, dass Sie nicht an dem Rückgabewert interessiert sind, indem Sie den void Operator:

void function() { console.log("Foo!"); }();

Das dient natürlich auch dazu, Klammern um das Ganze zu legen.


47
2017-11-16 16:45