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
.