JavaScript函数的执行时机

97 阅读1分钟

let i = 0 
for(i=0;i<6;i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}

上述代码为什么会打印出6个6,而不是0 1 2 3 4 5 

//定时器不会立即打印i,会在一段时间后尽快打印i
//先把代码执行完毕,然后定时器再开始打印i
//相当于 等一会打印i的值 打印6遍
//当循环执行完毕时 i=6,之后再打印,所以是6个6

为什么不是5个5

//当i=5时 i++为6
//下一次i=6不满足条件,退出循环

如何使其打印出0 1 2 3 4 5

for(let i=0;i<6;i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}
//JS在for和let一起用的时候,每次循环会多创建一个i
//相当于把i复制6次