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 x
já 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 x
ainda 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 x
em seus for
loops.
Para completar: se o for
loop 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 x
sem var), então as duas versões serão idênticas.
var
nã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