JS 函数的执行时机

1:为什么如下代码会打印 6 个 6

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

回答这个问题之前,先介绍一下setTimeout:
setTimeout(func,time)是在time(毫秒单位)时间后执行func函数。
它的运行机制是:
浏览器引擎按顺序执行程序,遇到setTimeout会将func函数放到执行队列中,等到主程序执行完毕之后,才开始从执行队列(队列中可能有多个待执行的func函数)中按照time延时时间的先后顺序取出来func并执行。 即使time=0,也会等主程序运行完之后,才会执行。

所以上述问题的原因是定时函数被加入执行队列,等主程序执行完后,此时才调用定时函数,i的值已经变成了6,所以打印出6个6;

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

(1):使用 for let 配合

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

(2):使用立即执行函数

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

你可能感兴趣的:(JS 函数的执行时机)