Этот код регистрирует 6, 6 раз:
(function timer() {
for (var i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
Но этот код...
(function timer() {
for (let i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
... записывает следующий результат:
0
1
2
3
4
5
Почему?
Это потому, что let привязывает к внутренней области каждый элемент по-разному, а var хранит последнее значение i?