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?
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?
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
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
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
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
, false
und null
.
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
-
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.
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