ключевое слово 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

Ответы на вопрос(3)

Ваш ответ на вопрос