Wenn Sie eine Variable mit var
definieren, wird die Deklaration der Variablen an den Anfang des Bereichs gehisst, und somit wird die Variable für den gesamten Bereich definiert. Die Initialisierung der Variablen (Zuweisung des Anfangswerts) bleibt an der gleichen Stelle im Code.
Also, in Ihrem zweiten Beispiel, wenn Sie alert(box)
tun, wurde die Variable box
bereits wegen der gehobenen var
Erklärung erklärt. Ihr zweites Beispiel:
alert(box);
var box = "Thinking outside the box";
ist im Grunde entspricht dies (die Erklärung der box
Variable an die Spitze des Anwendungsbereichs gehisst):
var box;
alert(box);
box = "Thinking outside the box";
Dies macht die box
Variable deklariert (wenn auch nicht initialisiert) vor Ihrer alert(box)
Aussage und damit Sie ein Ergebnis bekommen, die konsistent ist mit der Variable deklariert wird, aber noch keinen Wert (die alert()
Berichte undefined
das ist, was passiert, wenn die Variable existiert, wird aber noch nicht initialisiert).
Ihr erstes Beispiel nicht var
verwenden und somit gibt es keine Hebe so an dem Punkt, wo Sie alert(box)
tun, gibt es keine Variable überhaupt genannt box
ist und somit erhalten Sie die uncaught reference error
.
Es gibt viele, viele Beiträge hier auf, so dass die Details von Hebes beschreiben. Sie können eine lange Liste von ihnen hier sehen: https://stackoverflow.com/search?q=javascript+variable+hoisting wo Sie weitere Erklärungen zum variablen Heben finden.
Hinweis: Funktionsdeklarationen werden auch so einige der Beiträge werden Sie über Funktionsdeklarationen statt Variablendeklarationen finden gehisst, obwohl das Konzept ziemlich gleich ist.
Lesen Sie über "hissen" – elclanrs
Aufruf-Box, bevor Sie das Feld definiert haben, existiert es nicht, es existiert nur, wenn Sie es definieren, ob 'es' einen Wert hat oder nicht. – saj
Ihr Verständnis ist ziemlich viel :) –