La première version:
for (var x in set) {
...
}
déclare une variable locale appelée x. La deuxième version:
for (x in set) {
...
}
ne fait pas.
Si xest déjà une variable locale (c'est-à-dire que vous avez une variable var x;ou var x = ...;quelque part plus tôt dans votre portée actuelle (c'est-à-dire la fonction actuelle)) alors elles seront équivalentes. Si ce xn'est pas déjà une variable locale, l'utilisation de la seconde déclarera implicitement une variable globale x. Considérez ce code:
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();
vous pouvez vous attendre à ce alerte hey, there, heli, hey, there, copter, mais puisque le xest une seule et même il alertera hey, there, there, hey, there, there. Tu ne veux pas ça! Utilisez var xdans vos forboucles.
Pour couronner le tout: si la forboucle est dans la portée globale (c'est-à-dire pas dans une fonction), la portée locale (la portée xest déclarée dans si vous utilisez var x) est la même que la portée globale (la portée xest implicitement déclarée dans si vous utilisez xsans var), les deux versions seront donc identiques.
varn'a pas été utilisé pour déclarer la iteratori:Uncaught ReferenceError: i is not defined. Je vais donc l'utiliser à partir de maintenant: / webpack traite les variables "globales" bizarrement, pour en savoir plus, voir: stackoverflow.com/a/40416826