La prima versione:
for (var x in set) {
...
}
dichiara una variabile locale chiamata x
. La seconda versione:
for (x in set) {
...
}
non.
Se x
è già una variabile locale (cioè hai a var x;
o var x = ...;
da qualche parte prima nel tuo ambito corrente (cioè la funzione corrente)) allora saranno equivalenti. Se x
non è già una variabile locale, l'utilizzo della seconda dichiarerà implicitamente una variabile globale x
. Considera questo codice:
var obj1 = {hey: 10, there: 15};
var obj2 = {heli: 99, copter: 10};
function loop1() {
for (x in obj1) alert(x);
}
function loop2() {
for (x in obj2) {
loop1();
alert(x);
}
}
loop2();
ci si potrebbe aspettare che questo avviso hey
, there
, heli
, hey
, there
, copter
, ma dal momento che la x
è una e la stessa avviserà hey
, there
, there
, hey
, there
, there
. Non lo vuoi! Usa var x
nei tuoi for
loop.
Per finire: se il for
ciclo è nello scope globale (cioè non in una funzione), allora lo scope locale (lo scope x
è dichiarato in se si usa var x
) è lo stesso dello scope globale (lo scope x
è implicitamente dichiarato in se usi x
senza var), quindi le due versioni saranno identiche.
var
non è stato utilizzato per dichiarare l'iteratorei
:Uncaught ReferenceError: i is not defined
. Così sarò ad usarlo da ora in poi: / webpack Tratta variabili "globali" Stranamente, per maggiori informazioni, vedere: stackoverflow.com/a/40416826