2015-07-15 11 views
5

Mi riferivo ai documenti di JavaScript var hoisting, Lì in una sezione ho trovato Initialization of several variables con un Example indicato di seguito.Perché inizializzazione di più variabili che portano alla perdita dell'oscilloscopio?

var x = 0; 

function f(){ 
    var x = y = 1; 
} 
f(); 

console.log(x, y); // outputs 0, 1 
// x is the global one as expected 
// y leaked outside of the function, though! 

Dove Supponiamo di ottenere delle eccezioni come Uncaught Reference Error: y is not defined. ma non sta accadendo a causa di Scope trapelato e sta visualizzando 0,1.

Posso sapere perché sta accadendo nei dettagli e cosa ha fatto accadere questo. Infine, eventuali problemi relativi alle prestazioni?

+0

possibile duplicato del [è l'impostazione più variabili in 1 riga valida in javascript? (var x = y = 'valore';)] (http://stackoverflow.com/questions/7581439/is-setting-multiple-variables-in-1-line-valid-in-javascript-var-xy-value) –

+1

Non è una domanda relativa alle possibilità di "inizializzazione di più variabili" ma con variabile "Scope" cambia @torazaburo. –

+0

Leggi il duplicato proposto più da vicino. –

risposta

7

Non stai dichiarando .

var x = y = 1; 

è equivalente a

y = 1; 
var x = y; // actually, the right part is precisely the result of the assignement 

Un undeclared variable is a global variable (a meno che non siete in strict mode, allora è un errore).

L'esempio a cui ti riferisci era diverso, c'era una virgola , che is part of the multiple declaration syntax.

Si potrebbe correggere il codice in

var y=1, x=y; 
+0

In realtà, il codice originale è equivalente a 'y = 1; var x = 1; '. Se 'y' non può essere assegnato a 1 per qualsiasi motivo,' x' sarebbe uguale a 1. Vedi http://stackoverflow.com/a/31414927/3903374 –

+0

@RickHitchcock Più precisamente, è il valore di (y = 1) espressione. Dire che è 1 è equivalente in quel caso a dire che è y. –

+1

Correggere in questa istanza, ma quello era il presupposto nel mio post collegato, che non era corretto in quell'istanza. Se 'y' fosse stato precedentemente dichiarato come' const' 2, 'x' non * non * uguale a 2. –

Problemi correlati