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 xnon è 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 xnei tuoi forloop.
Per finire: se il forciclo è 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 xsenza var), quindi le due versioni saranno identiche.
varnon è 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