La primera versión:
for (var x in set) {
...
}
declara una variable local llamada x. La segunda versión:
for (x in set) {
...
}
no.
Si xya es una variable local (es decir, tiene una var x;o en var x = ...;algún lugar anterior en su alcance actual (es decir, la función actual)) entonces serán equivalentes. Si aún xno es una variable local, entonces el uso de la segunda declarará implícitamente una variable global x. Considere este código:
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();
se podría esperar que esto alerta hey, there, heli, hey, there, copter, pero ya que el xes uno y el mismo se alertará hey, there, there, hey, there, there. ¡No quieres eso! Úselo var xen sus forbucles.
Para colmo: si el forbucle está en el alcance global (es decir, no en una función), entonces el alcance local (el alcance xse declara en si lo usa var x) es el mismo que el alcance global (el alcance xse declara implícitamente en si lo usa xsin una var), entonces las dos versiones serán idénticas.
varno se utiliza para declarar el iteradori:Uncaught ReferenceError: i is not defined. Así que lo usaré de ahora en adelante: / webpack trata las variables "globales" de manera extraña, para obtener más información, consulte: stackoverflow.com/a/40416826