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