@darktowerk56c

Почему выводиться 10 раз 10?

for (count = 0; count < 10; count++) {
    setTimeout(() => console.log(count), 1000)
}
  • Вопрос задан
  • 351 просмотр
Решения вопроса 4
@vadimMalovaniy
потому что замыкание. Линк
Ответ написан
@Hedy
В вашем примере значение count передается по ссылке, поэтому через секунду значение этой переменной будет 10.

Вот тут хорошее описание: ссылка
Ответ написан
Stimulate
@Stimulate
могу
for (let count = 0; count < 10; count++) {
  setTimeout(function() {
    console.log(count)
  }, count*1000);
}
Ответ написан
@vladdimir
Верстальщик
Таймеры работают асинхронно. Цикл выполняется до того, как срабатывает первый таймер и переменная уже изменена.

А вот если вызывать таймер через стрелочную функцию:
... setTimeout(() => { ...
то в консоль выведется последовательно 1-10. Почему? Потому как стрелочные функции не имеют собственного контекста выполнения, каждый раз, вызываясь, они ориентируются на контекст блока выше, в данном случае самой функции setTimeout, которая уже выполняется в рамках текущих итераций цикла. То есть, в каждой итерации в момент обращения.
Стало немного яснее или еще больше запутал?
Или может я сам неправильно понимаю?))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы