let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
setTimeout函数的意思是,先执行完手头的事情(这里的for循环),在执行setTimeout函数内的内容,它就相当于在当前处开启了一个定时器,因此,这里要等到for循环结束之后才会执行setTimeout语句中的console.log(i)命令,而这时候i的值为6,总共开启了6个“计时器”,因此分别执行6次console.log(i)命令,输出6个6
而如果执行如下命令:
for(let i = 0 ; i < 6 ; i++){
setTimeout(()=>{
console.log(i)
},0)
}
则会输出0,1,2,3,4,5,6.因为JS在for和let一起用的时候会加东西,每次循环会创建一个i
其他解决办法:
for(let i = 0 ; i <= 6 ; i++){
(function(j){
setTimeout(function timer(){
console.log(j)
}, 0)
})(i)
}
for(let i = 0; i <= 6 ; i++){
setTimeout(function timer(j){
console.log(j)
}, 0, i)
}