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)
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容