Verwenden von var in einer verschachtelten Funktion zum Deklarieren einer Variablen mit demselben Namen wie ein Parameter von parent

8

Ich verwende JavaScript, um Code zu schreiben und ein unerwartetes Verhalten zu finden.

Ich verwende eine verschachtelte Funktion g in f . f hat einen Parameter namens m . Wenn Sie eine Variable in g mit demselben Namen verwenden und deklarieren, passiert etwas Seltsames:

%Vor%

Dieser Code führt zu undefined anstelle von 1 , was ich erwartet habe.

Das Verschieben der alert -Anweisung unter die var -Zeile würde zu der Antwort 0 führen, die Sinn macht.

Ich nehme an, das liegt daran, dass JavaScript nur Funktionen als Namensschließungen verwendet, var m wird mit der Deklaration an die Funktion g angehängt, aber m ist noch nicht zur Zeit von alert zugewiesen.

Aber ich bin mir nicht sicher, denn wenn die Funktion nicht verschachtelt ist, sieht das Verhalten gut für mich aus:

%Vor%

würde 1 erzeugen.

Könnte jemand erklären? Danke.

    
Ryan Li 05.04.2011, 08:44
quelle

1 Antwort

8

Javascript verwendet Funktionsumfang, was bedeutet, dass der Gültigkeitsbereich der Variablen nicht wie der Blockbereich von C nach {} in und außerhalb des Bereichs liegt, sondern dass Objekte durch Anfang und Ende von Funktionen in und aus dem Geltungsbereich kommen. Daher wird jede lokale Variable, die Sie in einer Funktion definieren, am Anfang der Ausführung dieser Funktion deklariert und hat den Typ undefined , bis Sie sie in Ihrer Funktion initialisieren.

Wenn also g ausgeführt wird, da die lokale Variable m irgendwann erstellt wird, deklariert die Laufzeitumgebung bereits, dass es eine lokale m gibt (die offensichtlich das externe m von f verbirgt). Funktion) mit dem Typ undefined vom Anfang der Ausführung von g

Siehe Ссылка , was erklärt, dass, wenn Sie var varName ausführen, die Variable an die Spitze von erhöht wird der Funktionsumfang Diese Seite hat viele großartige Beispiele, hier ist ein Zitat, das es zusammenfasst:

  

Jede Definition einer Variablen ist in Wirklichkeit eine Deklaration der Variablen am Anfang ihres Bereichs und eine Zuweisung am Ort, an dem die Definition ist.

    
davin 05.04.2011, 08:49
quelle

Tags und Links