Перша версія:
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