Maks00088
@Maks00088
Обучаюсь Java/JavaEE /Php/Js

Кто может объяснить данное поведение?

Вопрос по теме асинхронности и замыкания ..
Почему при втором подходе печатается 10 по 10 раз ?
Если кто сможет обьяснить весь flow буду рад!
var i;
var print = function () {
    console.log(i);
}
for(i=0;i<10;i++){
    print(); // При данном подходе печатает от 0 до 9 ! i Изменяется при каждой итерации! 
    //setTimeout(print,5000); // При данном подходе печатается 10 по 10 раз , i изменяется до 10 и после чего печатается 10 раз!
}
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
потому что цикл закончился к тому моменту когда таймаут работать начинает.
Ответ написан
Комментировать
@AgRuN
full stack JS developer
Это из-за того что первый print вызывается через 5 секунд после того как был запущен таймер, но цикл в течении этого времени выполнял все новые и новые итерации на каждой из которых он увеличивал значение переменной i на единицу до тех пор пока она не стала равна 10, все эти итерации заняли всего лишь несколько миллисекунд или десятков миллисекунд. В общем, к тому времени как print был вызван таймером в первый раз значение переменной i уже давно было равно 10 и больше не изменялось!
Ответ написан
Ваш ответ на вопрос

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

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