Pierwsza wersja:
for (var x in set) {
...
}
deklaruje lokalną zmienną o nazwie x. Druga wersja:
for (x in set) {
...
}
nie.
Jeśli xjest już zmienną lokalną (tj. Masz var x;lub var x = ...;gdzieś wcześniej w swoim obecnym zakresie (tj. Bieżącej funkcji)) to będą równoważne. Jeśli xnie jest już zmienną lokalną, użycie drugiej spowoduje niejawne zadeklarowanie zmiennej globalnej x. Rozważ ten kod:
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();
można się spodziewać to alert hey, there, heli, hey, there, copter, ale ponieważ xjest jedno i to samo będzie ostrzegać hey, there, there, hey, there, there. Nie chcesz tego! Użyj var xw swoich forpętlach.
Na dodatek: jeśli forpętla znajduje się w zasięgu globalnym (tj. Nie jest w funkcji), wówczas zasięg lokalny (zasięg xjest zadeklarowany w przypadku użycia var x) jest taki sam jak zasięg globalny (zakres xjest niejawnie zadeklarowany w jeśli używasz xbez var), więc obie wersje będą identyczne.
varnie był używany do deklarowania iteratori:Uncaught ReferenceError: i is not defined. Więc od teraz będę go używać: / webpack dziwnie traktuje zmienne „globalne”, więcej patrz: stackoverflow.com/a/40416826