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 x
ya 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 x
no 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 x
es uno y el mismo se alertará hey
, there
, there
, hey
, there
, there
. ¡No quieres eso! Úselo var x
en sus for
bucles.
Para colmo: si el for
bucle está en el alcance global (es decir, no en una función), entonces el alcance local (el alcance x
se declara en si lo usa var x
) es el mismo que el alcance global (el alcance x
se declara implícitamente en si lo usa x
sin una var), entonces las dos versiones serán idénticas.
var
no 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