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.
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)
Tags und Links javascript closures