为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
执行原理
-
先赋值i的值为0
-
然后判断是否 i<6 ? 如果满足条件会继续进入下一个循环。
-
这时本来要执行setTimeout(),但由于setTimeout()的性质,需要等一会才执行。
-
执行i++,此时i赋值为1.
-
继续判断i<6,满足进入第二个循环,第三次循环....
-
直到i的值是6时,不满足i<6.
-
停止循环
-
这时,前面的六次循环中的setTimeout() 开始执行,并打印出现在的i。
原因
使用 setTimeout的意思就是说尽快执行 ,尽快执行完当前代码后执行
那么这里就是在 for 循环之后打印出 i,所以也就是 6 个 6。
让上面代码打印 0、1、2、3、4、5 的方法
把变量的声明写在循环里就可以打印出0、1、2、3、4、5
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
还有什么其他方法可以打印出 0、1、2、3、4、5
可以使用setTimeout的第三个参数
let i = 0
for(i = 0; i<6; i++){
setTimeout((i)=>{
console.log(i)
},0,i)
}