@justifycontent

Почему способ объявления переменной i влияет на результат?

for (var i = 0; i < 3; i++) {
    setTimeout(function() {
        console.log(i)
    }, 1000)
}

Результат: 3 3 3

for (let i = 0; i < 3; i++) {
    setTimeout(function() {
        console.log(i)
    }, 1000)
}

Результат: 0 1 2

Можете подробно объяснить разницу? Возможно это из-за всплытия, но я не могу понять как это происходит

PS: И еще вопрос: ждет ли тело функции выполнение setTimeout?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
DanArst
@DanArst Куратор тега JavaScript
Гриффиндор в моде при любой погоде!
Можете почитать про разницу между var и let тут
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
И еще вопрос: ждет ли тело функции выполнение setTimeout?

нет.

чтобы цикл ждал на каждой итерации, надо промисифицировать setTimeout, цикл запускать в async-функции, таймер авайтить.

const delay = (ms) => new Promise(r => setTimeout(r, ms));

async function run() {
    for (var i = 0; i < 3; i++) {
        await delay(1000);
        console.log(i);
    }
}

run();


и теперь уже без разницы, let или var, думаю понятно почему.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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