A primeira versão:
for (var x in set) {
...
}
declara uma variável local chamada x. A segunda versão:
for (x in set) {
...
}
não.
Se xjá for uma variável local (ou seja, você tem um var x;ou em var x = ...;algum lugar anterior em seu escopo atual (ou seja, a função atual)) então eles serão equivalentes. Se xainda não for uma variável local, o uso da segunda irá declarar implicitamente uma variável 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();
você pode esperar que isso alerta hey, there, heli, hey, there, copter, mas desde que o xé uma ea mesma coisa vai alertar hey, there, there, hey,there , there. Você não quer isso! Use var xem seus forloops.
Para completar: se o forloop estiver no escopo global (ou seja, não em uma função), então o escopo local (o escopo xé declarado em se você usar var x) é o mesmo que o escopo global (o escopo xé declarado implicitamente em se você usar xsem var), então as duas versões serão idênticas.
varnão foi utilizado para declarar o iteradori:Uncaught ReferenceError: i is not defined. Portanto, irei usá-lo de agora em diante: / webpack trata variáveis "globais" de maneira estranha, para obter mais informações, consulte: stackoverflow.com/a/40416826