2016-05-03 14 views
2

Ich verstehe, dass alle Variablen hochgezogen werden, aber die Zuweisungen sind nicht (egal, Funktionen für diese Frage - das macht für mich Sinn - related SO).Welche Bedeutung hat das variable Heben?

Aber ich sehe nicht, wie sich das auf den Code auswirkt. Ich schrieb eine Geige zum Experimentieren.

Was ist der Vorteil, wenn Sie die Variable hissen und geben Sie den Wert von undefined, was der Fall zu sein scheint.

var a = 1; 

function foo (proxy){ 
    print(proxy); 
} 

function print(out){ 
    document.getElementById("out").innerHTML = out; 
} 

// foo("you") 

print(d); // undefined 

var d = 4; 

print(d); // 4 

https://jsfiddle.net/6ue7052k/1/

+0

Entfernen Sie die 'var' vor' d' und der erste zu druckende Aufruf löst eine Ausnahme aus. –

+0

Warum wurde diese Frage wieder geöffnet? Es ist ein klares Duplikat von [Warum hostet JavaScript Variablen?] (Http://stackoverflow.com/questions/15005098/why-does-javascript-hoist-variables) –

+1

@squint Es schien nicht wirklich ein komplettes Duplikat zu sein mir. Warum es sie anhebt, ist eine andere Frage, wie es den Code beeinflusst. – Paulpro

Antwort

2

Hier ist eine Möglichkeit, es den Ausgang beeinflussen kann:

function outer () { 

    var a = 'foo'; 

    function inner () { 
     console.log(a); 
     var a = 'bar'; 
    } 

    inner(); 

}; 

Ohne Hebe outer() ausgeben würde 'foo', sondern weil die lokale var a Erklärung gehisst wird, gibt er undefined statt. Das ist nicht sehr nützlich, aber es zeigt, dass es einen Effekt haben kann.

Beim Schreiben von JavaScript hat das variable Heben keinen Vorteil. Alles, was es erreicht, könnte genauso einfach ohne es durchgeführt werden, indem alle Variablen zu Beginn jeder Funktion deklariert werden (ohne ihnen zuzuordnen). Es ist nur ein Implementierungsdetail.