Первая версия:
for (var x in set) {
...
}
объявляет локальную переменную с именем x. Вторая версия:
for (x in set) {
...
}
не.
Если xэто уже локальная переменная (т.е. у вас есть var x;или var x = ...;где-то раньше в вашей текущей области (т.е. текущая функция)), они будут эквивалентны. Если xэто еще не локальная переменная, то использование второй неявно объявляет глобальную переменную x. Рассмотрим этот код:
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();
Вы могли бы ожидать , что это предупреждение hey, there, heli, hey, there, copter, но так как xэто один и тот же она будет предупреждать hey, there, there, hey, there, there. Вы этого не хотите! Используйте var xв forпетлях.
В довершение ко всему: если forцикл находится в глобальной области видимости (т.е. не в функции), то локальная область видимости (при использовании xобъявляется область видимости var x) такая же, как и глобальная область видимости (область xнеявно объявляется в если вы используете xбез var), поэтому две версии будут идентичны.
varне использовалась , чтобы объявить итераторi:Uncaught ReferenceError: i is not defined. Так что с этого момента я буду использовать его: / webpack странно обрабатывает «глобальные» переменные, подробнее см .: stackoverflow.com/a/40416826