ECMAScript 6 let
должен обеспечивать область блока без головных болей. Может ли кто-нибудь объяснить, почему в приведенном ниже коде i
функция разрешает последнее значение из цикла (как и с var
) вместо значения текущей итерации?
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
things["fun" + i] = function() {
console.log(i);
};
}
things["fun0"](); // prints 3
things["fun1"](); // prints 3
things["fun2"](); // prints 3
В соответствии с MDN с помощью let
в цикле for
, который должен привязать переменную в области тела цикла. Вещи работают так, как я ожидаю, когда я использую временную переменную внутри блока. Почему это необходимо?
"use strict";
var things = {};
for (let i = 0; i < 3; i++) {
let index = i;
things["fun" + i] = function() {
console.log(index);
};
}
things["fun0"](); // prints 0
things["fun1"](); // prints 1
things["fun2"](); // prints 2
Я протестировал script с помощью Traceur и node --harmony
.