Javascript Funktionsumfang

8

Wer kann erklären, warum das Ergebnis [20, 20, 10, 10] in diesem Code ist:

%Vor%

Links zur Spezifikation sind willkommen

    
anton_byrna 19.02.2010, 09:45
quelle

3 Antworten

7

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:

  1. foo.bar (), this Schlüsselwort in bar Funktion ist an foo Objekt gebunden
  2. (foo.bar) () ist dasselbe wie oben,
  3. 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.

%Vor%

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.

    
SWilk 19.02.2010, 14:45
quelle
0

Ich denke, folgende Frage wird dafür hilfreich sein.

    
Anil Namde 19.02.2010 11:02
quelle
0

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.

    
Jimmy Cuadra 19.02.2010 11:29
quelle

Tags und Links