Отвечая на ваш вопрос,
test(){
for(const i =0 ; i< 5; i++){
setTimeout(function(){
console.log(i)
},100*i);
}
}
Этот код по существу становится,
test(){
// can be only initialized once
const i;
for(i = 0 ; i< 5; i++){
setTimeout(function(){
console.log(i)
},100*i);
}
}
Поскольку каждая переменная JavaScript поднята в верхней части своей области, в этом случае test()
как ее переменная const
, поэтому она поднята в этом блоке и недоступна за ее пределами.
Чтобы исправить кусок кода:
test(){
// can be only multiple times in that block
for(let i = 0 ; i< 5; i++){
setTimeout(function(){
console.log(i)
},100*i);
}
}
Что становится,
test(){
let i;
// can be only multiple times in that block
for(i = 0 ; i< 5; i++){
setTimeout(function(){
console.log(i)
},100*i);
}
}
Так как const
и let
имеют область действия блока и находятся в верхней части блока, в котором он определен, единственное различие между const
и let
состоит в том, что переменные, объявленные как const, не могут переинициализироваться.