先来看一段代码
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
如果是按照以前学的c语言,是打印出
0
1
2
3
4
5
但是在js里面,这里是打印出6个6;
因为js的执行机制,setTimeout会在最后执行,在最后的时候,i已经变成了6;
所以是打印出6个6;
那么打印出0,1,2,3,4,5代码该怎么写呢
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
这样就可以打印出0,1,2,3,4,5
这大概是因为let声明的变量的作用域的问题。
下面是另一种写法,利用立即执行函数,并把每一个i通过参数传过去。
也是打印出0,1,2,3,4,5
let i = 0;
for(i = 0; i<6; i++){
!function(i) {
setTimeout(()=>{
console.log(i)
},0)
}(i)
}