Задать вопрос
@darktowerk56c

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

for (count = 0; count < 10; count++) {
    setTimeout(() => console.log(count), 1000)
}
  • Вопрос задан
  • 379 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 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, которая уже выполняется в рамках текущих итераций цикла. То есть, в каждой итерации в момент обращения.
Стало немного яснее или еще больше запутал?
Или может я сам неправильно понимаю?))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 16:42
2000 руб./за проект
18 дек. 2024, в 16:33
2000 руб./в час
18 дек. 2024, в 16:06
5000 руб./за проект