JavaScript: директивы в цикле и цикле событий
объясняем, как работает setTimeout внутри цикла в JavaScript с директивами let и var
В статье “JavaScript: цикл и цикл событий” мы разобрали, какой результат будет получен, если воспользоваться функцией setTimeout()
внутри цикла for
, для которого счетчик i
объявлен, как глобальная переменная с помощью директивы var
.
Но, что получится, если вместо var
использовать let
?
function runner(){
for(let i = 0; i < 3; i++){
setTimeout(()=> console.log(i),0);
}
}
runner()
Результат:
0
1
2
Так как счетчик i
определён директивой let
, область видимости для него ограничивается пределами одного блока.
Блок это что угодно между { }
Для setTimeout()
цикл событий (Event loop) в данном случае будет находиться в пределах одной итерации цикла for...
, поэтому каждый раз при выводе в консоль i
будет иметь новое значение, замкнутое внутри своей области видимости.
Спасибо за внимание.