У меня есть вопрос о том, как область действия let
работает в цикле for
относительно следующих примеров.
for(let i=0;i<5;i++){
setTimeout(()=>{
console.log(i);
},1000)
}
// will print out 0,1,2,3,4
for(var j=0;j<5;j++){
setTimeout(()=>{
console.log(j);
},0)
}
// will print out 5,5,5,5,5
Я знаю разницу между var
и let
. var
имеет область действия функции, а let
имеет область действия блока.
Для let
, хотя i
находится внутри цикла for
, console.log(i)
всегда принимает одну и ту же переменную i
. Переменная i
обновляется на каждой итерации. Таким образом, когда функции обратного вызова setTimeout
выполняются, они имеют одно и то же i
и должны выводить одно и то же число, которое здесь равно 5
.var
и let
имеют разную область действия, но обе обновляются на каждой итерации, и обе переменные регистрируются в конце. Разве они не должны иметь тот же результат?