ключевое слово let в цикле for
ECMAScript 6let
должен обеспечить объем блока без головной боли при подъеме. Могут ли некоторые объяснить, почему в коде ниже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
Я проверил сценарий с Traceur и.node --harmony