JS 函数的执行时机

199 阅读1分钟

如下代码会打印出什么呢

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

这段代码的意思就是有一个for循环,每次循环都会创建一个setTimeout函数,但不是马上执行,而是循环完六次后执行,所以循环完后i=6,然后执行setTimeout中的callback函数打印出6个6。

让上面代码打印 0、1、2、3、4、5 的方法

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

因为 JS 在 forlet一起用时会加东西,每次循环都会多创建一个 i ...

其他实现方法---即时函数

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