2016-03-27 8 views
1

Ich habe versucht zu verstehen, JavaScript-hotieren und von dem, was ich verstanden habe, Speicherplatz für alle Variablendeklarationen vor der Ausführung des Codes reserviert ist.JavaScript-Hochladen für mehrere Deklarationen der gleichen Variablen

Ich würde gerne verstehen, wie der Interpreter durch das Hochziehen im Falle von mehreren Deklarationen für die gleiche Variable funktioniert. Betrachten Sie den folgenden Code ein:

console.log(a); 

//first declaration 
function a() { 
    console.log('hello'); 
} 

//second declaration 
var a = 2; 

Die Ausgabe ist die Funktionsdeklaration:

function a() { 
    console.log('hello'); 
} 

Also, ich bin die erste Erklärung der Annahme der Dolmetscher begegnet ist derjenige, der im Speicher gespeichert ist. Ändern Sie jedoch die Reihenfolge der Deklarationen zu:

console.log(a); 

//first declaration 
var a = 2; 

//second declaration 
function a() { 
    console.log('hello'); 
} 

Ergebnisse in der gleichen Ausgabe! Der Interpreter ignoriert die erste Deklaration und speichert die zweite Deklaration im Speicher. Warum passiert dies? Sollte der Ausgang im zweiten Fall nicht undefined sein?

Antwort

1

Ihr Code wird wie unten vom Interpreter gelesen werden,

function a() { 
    console.log('hello'); 
} 
var a; 
console.log(a); 
a = 2; 

so während des obigen Code ausgeführt wird, a wird die Funktion zunächst mit Bezug und danach var a; Linie ausgeführt wird, da a ist es nicht definiert , ein zugewiesener Wert wird nicht mit undefined mittels einer Variablendeklaration gesetzt. Daher wurde diese Zeile ignoriert und der primitive Wert der Funktionsreferenz gedruckt.

Ein einfaches Beispiel für ein besseres Verständnis würde, sein

function x(){ }; 
var x; 
console.log(x); //function x(){ } 
+0

so nachfolgende mehrere Erklärungen ignoriert, wenn sie einen bereits zugewiesenen Wert zu undefinierten zu setzen versuchen? –

+0

@TarunDugar Ja genau. Die bereits zugewiesenen Werte werden nicht durch eine Variablendeklaration undefiniert ersetzt. –

+0

Ok, hab es! Vielen Dank. –

Verwandte Themen