JavaScript-Pluszeichen vor dem Funktionsausdruck

Lesezeit: 5 Minuten

JavaScript Pluszeichen vor dem Funktionsausdruck
jOpacic

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/macht?

  • Ben Alman erklärt es hier: mths.be/iife

    – Mathias Bynens

    13. November 2012 um 18:36 Uhr

  • verwandt: Was macht das Ausrufezeichen vor der Funktion?

    – Bergi

    20. August 2014 um 11:39 Uhr

JavaScript Pluszeichen vor dem Funktionsausdruck
TJ Crowder

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

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

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

+ ist nur eine der Optionen. Es kann auch sein -, !, ~, oder so ziemlich jeder andere unäre 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!"); }());

  • Mehr Ausarbeitung ist hier, benalman.com/news/2010/11/…

    – Kundan Singh Chouhan

    12. November 2012 um 10:14 Uhr

  • Können wir nicht sagen, dass der Paren-Umbruch eine überlegene Notation ist? Ich bin SEHR vertraut mit Klammern, die dazu dienen, Ausdrücke zu umfassen. Es ist überhaupt nicht klar, was + in diesem Fall tut, wenn Sie diese geheimnisvolle Eigenart von js nicht bereits kennen.

    – Chris

    13. November 2012 um 19:03 Uhr

  • Hinweis: Von den beiden Elternoptionen jsLint bevorzugt das zweite. Ich denke jsHinweis ist weniger pingelig.

    – Rote Bete-Rote Bete

    11. August 2013 um 23:21 Uhr

  • Eine der häufig verwendeten Bibliotheken, die die „Plus“-Notation verwendet, ist Bootstrap (so bin ich auf diesen Thread gestoßen).

    – Ville

    21. Oktober 2014 um 21:57 Uhr

  • Bootstrap macht das übrigens: maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.js

    – AlexGrafe

    26. Oktober 2014 um 11:01 Uhr


JavaScript Pluszeichen vor dem Funktionsausdruck
Phil h

Tochtergesellschaft der Antwort von @TJCrowder, + wird normalerweise verwendet, um die numerische Umwandlung eines Werts zu erzwingen, wie diese SO-Antwort erklärt. In diesem Fall wird es als „unärer Plus-Operator“ bezeichnet (um das Googeln zu erleichtern).

var num = +variant;

Vor einer Funktion kann es also eine Möglichkeit sein, das Ergebnis der Funktion als Zahl zu interpretieren. Ich bezweifle, dass dies noch passiert, aber theoretisch könnte das JIT dies verwenden, um die Funktion als reine numerische Funktion usw. zu kompilieren. Um jedoch zu verhindern, dass das unäre Plus eine Verkettung ist, wenn es in einem größeren Ausdruck verwendet wird, bräuchten Sie Klammern:

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

  • Wie hat das jemals 37 Upvotes bekommen? Die (+function() { ... })() Notation kann niemals fehlerfrei ausgeführt werden (abgesehen davon, dass dies die Frage nicht beantwortet).

    – Weißquark

    15. November 2012 um 21:21 Uhr


  • @whitequark: Ich habe ein Paar geschweifter Klammern um die Funktion + den Aufruf verpasst. Vermute, dass die positiven Stimmen eher auf die Erklärung der Zahlenverteilung zurückzuführen waren.

    – Philipp H

    15. November 2012 um 22:46 Uhr

  • OK, ich war vielleicht pingelig.

    – Weißquark

    16. November 2012 um 13:13 Uhr

  • @Christoph Ich wäre geneigt, diese Klammern dort zu lassen. Tatsächlich würde ich so weit gehen, sie hinzuzufügen, wenn sie fehlen würden. Es macht viel klarer, was vor sich geht, und verhindert auch Probleme, wenn der Code minimiert wird, indem die Leerzeichen entfernt werden, was zu führt 3++function... was nicht dasselbe ist.

    – Benjam

    20. November 2013 um 17:41 Uhr

  • Obwohl bei weiterem Nachdenken, die +function... ist an sich unnötig. Das gleiche Ergebnis kann mit erzielt werden blah + function( ){ ... }( ); was die Notwendigkeit für die Umhüllungsklammern negieren würde.

    – Benjam

    20. November 2013 um 17:47 Uhr

Die kurze Antwort lautet also, dass ein Syntaxfehler verhindert wird, indem die Funktionsergebnisse auf die eine oder andere Weise verwendet werden.

Sie können der Engine auch mitteilen, dass Sie nicht einmal am Rückgabewert interessiert sind, indem Sie die verwenden void Operator:

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

Natürlich dient auch das Anbringen von Klammern um das Ganze diesem Zweck.

  • Nichtig oder Klammern sind immens bevorzugt. Sie sind WTF-frei. Die Verwendung von + ist die Art von Cleverness, die nicht sehr schlau ist.

    – Peter Wone

    16. März 2015 um 10:08 Uhr

  • Ein guter Punkt. Es scheint, als würde die Verwendung eines der Operatoren gegen den derzeitigen Industriestandard verstoßen. Vielleicht würden sich “coole Kinder” -Entwickler dafür entscheiden, sonst sehe ich immer noch keinen Sinn darin, etwas anstelle von void oder () zu verwenden.

    – Dudewad

    9. November 2015 um 23:51 Uhr

Lösung & Ursprünge

Die + Zeichen vor der eigentlich aufgerufenen Funktion Unäres Plus und ist Teil einer Gruppe namens a Unäre Operatoren und (das unäre Plus) wird verwendet, um Zeichenfolgen und andere Darstellungen in Zahlen (Ganzzahlen oder Gleitkommazahlen) umzuwandeln.

Eine unäre Operation ist eine Operation mit nur einem Operanden, also einer einzigen Eingabe. Dies steht im Gegensatz zu binären Operationen, die zwei Operanden verwenden

Grundlegende Anwendungen:

const x = "1";
const y = "-1";
const n = "7.77";

console.log(+x);
// expected output: 1

console.log(+n);
// expected output: 7.77

console.log(+y);
// expected output: -1

console.log(+'');
// expected output: 0

console.log(+true);
// expected output: 1

console.log(+false);
// expected output: 0

console.log(+'hello');
// expected output: NaN

Wenn das + Zeichen vor einer Variablen, Funktion oder einer beliebigen zurückgegebenen Zeichenfolgendarstellung positioniert wird, wird die Ausgabe in Integer oder Float konvertiert; der unäre Operator (+) konvertiert auch die Nicht-String-Werte true, falseund null.

Erweiterte Anwendungen

Der richtige Weg, um die oben erwähnte Funktion zu verwenden, ist:

+function(){return "3.141"}()
// expected output: 3.141

Ich liebe es zu benutzen + ein drehen new Date() widersprechen a Zeitstempelso was:

+new Date()
// expected output: 1641387991035

Andere unäre Operatoren

- Der unäre Negationsoperator konvertiert seinen Operanden in den Zahlentyp und negiert ihn dann.

~ Bitweiser NOT-Operator.

! Logischer NOT-Operator.

delete Der delete-Operator löscht eine Eigenschaft aus einem Objekt.

void Der void-Operator verwirft den Rückgabewert eines Ausdrucks.

typeof Der typeof-Operator bestimmt den Typ eines gegebenen Objekts.

943020cookie-checkJavaScript-Pluszeichen vor dem Funktionsausdruck

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

Privacy policy