Доброго времени суток.
Есть такой классический пример из собеседований:
const fib = [1, 2, 3, 5, 8, 13]
for (var i = 0; i < fib.length; i++) {
setTimeout(() => {
console.log(i, '---', fib[i])
}, 1)
}
Результат в консоли
6 --- undefined
6 --- undefined
6 --- undefined
6 --- undefined
6 --- undefined
6 --- undefined
Проблему можно решить заменив var на let или используя замыкания.
Я не понимаю, почему с var цикл отрабатывает и только потом начинает работать колбэк( я знаю про задержку setTimeout) пытаясь взять значение c несуществующим индексом 6. При этом объявление через let работает как надо. Читал что это как то связано областью видимости(скоуп), но ясности это не добавило.
В общем буду благодарен если кто объяснит это простыми словами.