Missverständnis von JavaScript-Schließungen

8

Ich bin neu in JavaScript und habe ein Problem, diesen Code zu verstehen:

%Vor%

Dies druckt (in v8 / d8) a is 4; b is 5 . Wenn ich die var value; -Zeile auskommentiere, bekomme ich a is 5; b is 5 . Wo ist das Objekt "Wert" und warum gibt es zwei davon? Danke.

    
EML 04.01.2012, 15:01
quelle

2 Antworten

12

Die Variable value ist lokal für addProperty . Beim ersten Aufruf von addProperty wird eine neue value erstellt, über die beide Funktionen schließen. Beim zweiten Aufruf von addProperty wird eine zweite value erstellt, über die zwei neue Funktionen geschlossen werden.

Durch das Entfernen von var wird ein globales value für das Objekt window erstellt, das von allen Funktionen gemeinsam genutzt wird.

Vielleicht wollen Sie das tun:

%Vor%

Diese neue Funktion addProperty schließt über 1 value , egal wie oft sie aufgerufen wird. Ich bin mir nicht sicher, ob ich den Anwendungsfall verstehe, aber das sollte den Unterschied demonstrieren.

    
Wayne Burkett 04.01.2012, 15:06
quelle
1

Wenn Sie eine Variable nicht explizit in einer Funktion deklarieren, wird ihr Geltungsbereich als global angenommen. Im zweiten Fall, da Sie value nicht explizit als lokal für die Funktion addProperty() deklariert haben, wird dies als global behandelt.

Aber wenn Sie es explizit innerhalb einer Funktion deklarieren, wird es lokal für die Funktion. Jedes Mal, wenn die Funktion aufgerufen wird, wird eine neue Kopie der lokalen Funktion der Funktion auf dem Stapel erstellt (und wichtig ist, dass sie dort im Stapel verbleibt, solange ein Verweis darauf vorhanden ist)

    
techfoobar 04.01.2012 15:08
quelle

Tags und Links