对于以下函数,执行后,会打印出6,6,6,6,6,6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
setTimeout函数会设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。对于上面的代码,setTimeout会让console.log(i)在for循环结束后执行,当for循环结束时,i的值为6,因此会打印出6,6,6,6,6,6。
如果期待得到0,1,2,3,4,5的结果,可以用以下代码实现:
for (let i = 0; i < 6; i++) {
setTimeout(()=>{
console.log(i)
},0)
}
for循环的()中,用let声明变量时,每次执行循环体,都会单独设置一个i。
此外,还可以用以下代码实现:
for (var i = 0; i < 6; i++) {
!function(i){
setTimeout(()=>{
console.log(i)
},0)
}(i);
}
这段代码内加入了一个立即执行函数,让循环体中的代码执行后再进入下一次循环