Задать вопрос
@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. Но кааак?
  • Вопрос задан
  • 366 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 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));
}
Ответ написан
Ваш ответ на вопрос

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

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