2015-10-14 19 views
7

Nel codice qui sottoPerché x non è definito nell'ambito interno?

var x = 1; 

(function() { 
    console.log(x); 
    var x = 2; 
}()); 

Perché è che quando console.log (x), x non è definito?

+0

@WolfOfWallstreet Quindi vuoi dopo console.log (x); ottenere il numero 2 giusto? –

risposta

9

sollevamento variabile. Il codice effettivo viene eseguito in questo modo.

var x = 1; 
(function() { 
    var x; // x = undefined 
    console.log(x); 
    x = 2; 
})(); 

Modifica: Su consiglio di Lister, un po 'sul sollevamento variabile. Da MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var):.

"dichiarazioni variabili, ovunque si verifichino, vengono elaborati prima dell'esecuzione qualsiasi codice L'ambito di una variabile dichiarata con var è il contesto di esecuzione corrente, che è sia la funzione che contiene o, per le variabili dichiarato al di fuori di qualsiasi funzione, globale. "

+2

Puoi spiegare all'OP quale sia il sollevamento variabile e perché 'var x = 1; funzione any() {console.log (x);} 'funziona? –

+0

So che possono cercarlo altrove, ma sarebbe bello se le risposte fossero autonome. –

+0

@ TBWill4321 Questo codice quando lo faccio. Fornisce undefined! –

3

A causa del compilatore, anche se si avvia una var al di sotto del codice, il compilatore lo invia in alto, proprio come var x;, quindi prima avviare come "x" non definita prima di eseguire console.log, ecco perché è una tale buona pratica per iniziare tutti i vars che userete per prima cosa nella funzione, quindi questi errori non accadrà.

Problemi correlati