@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. Но кааак?
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 2
shmatuan
@shmatuan
переменная, объявленная через var, видна везде в функции.
Переменная, объявленная через let, видна только в рамках блока

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

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

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

Войти через TM ID
Похожие вопросы
Digital Sharks Казань
от 60 000 до 65 000 руб.
CS Money Санкт-Петербург
от 120 000 до 150 000 руб.
Ingram Micro Cloud Москва
от 170 000 руб.