Задать вопрос
@sergei026
Стремлюсь стать верстальщиком

Разъясните пожалуйста как работают эти циклы?

for(var i=0; i<10; i++) {
    setTimeout(function() {
        alert(i);
    }, 100);
}

получается
10 раз число 10.

for(let i=0; i<10; i++) {
    setTimeout(function() {
        alert(i);
    }, 100);
}

Получается
Числа от 0 до 9. Но кааак?
  • Вопрос задан
  • 367 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
shmatuan
@shmatuan
8 year of Web, 5 years of Vue
переменная, объявленная через var, видна везде в функции.
Переменная, объявленная через let, видна только в рамках блока

https://learn.javascript.ru/let-const

Поэтому через таймаут в 1 случае будет число в переменной на данный момент прошедшего времени, а во втором - соответствующее значение в данной итерации цикла
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BRAGA96
@BRAGA96
Если var, то используйте замыкание
for (var i = 0; i < 10; i++) {
    (function (index) {
        setTimeout(function () {
            alert(index);
        }, 100);
    }(i));
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы