niech słowo kluczowe w pętli for

ECMAScript 6'slet ma zapewnić blokowy zasięg bez bólów głowy. Czy ktoś może wyjaśnić dlaczego w poniższym kodziei w funkcji rozstrzyga ostatnią wartość z pętli (tak jak w przypadkuvar) zamiast wartości z bieżącej iteracji?

"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

WedługMDN za pomocąlet wfor taka pętla powinna wiązać zmienną w zasięgu ciała pętli. Rzeczy działają tak, jak ich oczekiwałem, gdy używam tymczasowej zmiennej wewnątrz bloku. Dlaczego to konieczne?

"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

Testowałem skrypt za pomocą Traceur inode --harmony.

questionAnswers(3)

yourAnswerToTheQuestion