MDN Docs on var
hoisting Zitiert,
Da Variablendeklarationen (und Erklärungen im allgemeinen) verarbeitet werden, bevor jeder Code ausgeführt wird, wird eine Variable irgendwo im Code erklärt entspricht es an der Spitze zu erklären. Dies bedeutet auch, dass eine Variable verwendet werden kann, bevor sie deklariert wird. Dieses Verhalten wird als "Hochziehen" bezeichnet, da die Variablendeklaration scheinbar an den Anfang der Funktion oder des globalen Codes verschoben wird.
Also, in Ihrem Fall, weiß, JavaScript, dass eine lokale Variable (nicht außen erklärte eins)x
irgendwo in der Funktion definiert ist, aber es weiß nicht, den tatsächlichen Wert, bis die Ausführung einen erreicht Zuweisungsanweisung, die x
zuweist. (Deklarationen werden während der Kompilierzeit verarbeitet und Aufgaben werden in der Ausführungszeit ausgeführt) Bis die Zuweisung erfolgt ist, wird der Standardwert undefined
verwendet. Da undefined
is falsy die Bedingung
if (!x) {
erfüllt ist und die Zuordnung Anweisung ausgeführt wird. Deshalb erhalten Sie hoisted
in der Alarmbox.
Angenommen, Sie haben in der Funktion nicht x
erklärt,
var x;
var y = function() {
if (!x) {
x = 'hoisted';
}
alert(x);
}
y();
alert(x);
Da hier x
ist nicht überall in der Funktion zur Laufzeit erklärt, JavaScript für x
in den höheren Bereichen suchen. In diesem Fall findet es es direkt außerhalb der Funktion. Also, dass x
wird verwendet. Da Sie hoisted
zu x
zugewiesen haben, wird der innere alert
auch hoisted
sagen und nach dem Verlassen der Funktion, alert(x)
alarmiert auch hoisted
.
es ist äquivalent zu 'var y = function() {var x; ... ', wodurch' x' lokal zur Funktion und nicht zugewiesen bleibt. wenn blocks nicht "stoppen" "var" vom Hochziehen – dandavis
Ja, "var x" hebt an den Anfang des Bereichs, dies ist normales Verhalten der Variablendeklaration in JS. – dfsq
@ Qantas94Heavy: Dieses könnte tatsächlich ein gutes kanonisches Duplikat für variables Heben werden, afaik haben wir momentan nicht. Nur für [Funktion hissen] (http://stackoverflow.com/q/7506844/1048572) ... – Bergi