Wer kann erklären, warum das Ergebnis [20, 20, 10, 10] in diesem Code ist:
%Vor%Links zur Spezifikation sind willkommen
Ich kann Sie nicht auf die Spezifikation hinweisen, aber ich kann Ihnen wärmstens empfehlen, Douglas Crockfords "Javascript: Die guten Teile" . Dieses Buch wird Ihnen helfen, die meisten der seltsamen, aber großartigen Funktionen von JavaScript zu verstehen.
Ab Ihrer Frage:
this
Schlüsselwort in bar
Funktion ist an foo
Objekt gebunden In JavaScript können Sie Variablen mehrmals von rechts nach links zuweisen
z = 3; x = (y = z); console.log (x); // 3
Funktionen sind Variablen wie alles andere. Sie weisen die Funktion foo.bar
also foo.bar
zu, aber die Klammer bewirkt, dass die zugewiesene Funktion zurückgegeben und dann ausgeführt wird.
Die von Klammern zurückgegebene Funktion ist an nichts gebunden, daher verweist this
auf das globale Objekt, im Fall von Browsern auf das Objekt window
.
4 .. Die Klausel (foo.bar, foo.bar) () ist genau gleich:
%Vor% Bitte lesen Sie über binding
der Funktionen in JavaScript.
Die ersten beiden Funktionsaufrufe sind äquivalent. Sie rufen foo
s bar
Methode im Kontext von foo
auf - daher ist der von this.x
zurückgegebene Wert der Wert von foo
s x
Eigenschaft, was 20
ist.
Die zweiten beiden Aufrufe sind beide fraglich / ungültige Syntax. Versuchen Sie, Ihren Code über JSLint auszuführen, und Sie werden feststellen, dass er mehrere Fehler ausspuckt und dann ganz erstickt. Meine beste Vermutung, warum sie 10
zurückgeben, ist, dass sie versucht, Ihren Code in einem Fall zu analysieren, in dem es wirklich nicht und nicht durcheinander geht. 10
wird möglicherweise zurückgegeben, da der Browser nicht herausfinden kann, was Sie versuchen, und standardmäßig den globalen (Fenster-) Bereich verwendet, in dem der Wert von x
10
ist. Dies würde auch den Kommentar von Ramesh Vel erklären, dass die zweiten beiden Werte als undefined
in IE erscheinen. Aufgrund der Tatsache, dass die Syntax ungültig ist, werden verschiedene Implementierungen von JavaScript wahrscheinlich anders damit umgehen.
Tags und Links javascript