理解js的事件循环Event Loop

前端业务或者面试中经常会碰见js的执行先后顺序,里面的坑很多,这时候就是在考察你有没有理解事件循环了
那么什么是事件循环Event Loop呢?
因为js是单进程的,所以有了异步,同步异步出现后就有了事件执行的先后顺序
简单说,就是在程序中设置两个线程:一个负责程序本身的运行,称为"主线程";另一个负责主线程与其他进程(主要是各种I/O操作)的通信,被称为"Event Loop线程"(可以译为"消息线程")。

异步分为宏任务和微任务
宏任务:整体的Script setTimeout setInterval
微任务:Promise process.nextTick(事件轮询,定义一个动作.并且在下一个事件轮询的时间点上执行。)

有微则微,无微则宏(记住这句话)
在这里插入图片描述
下面我们举一个简单的例子

setTimeout(function() {
    console.log('1');
})

new Promise(function(resolve) {
    console.log('2');
    resolve(true)
}).then(function() {
    console.log('3');
})

console.log('4');

执行输出

2,4,3,1

顺序:微任务promise->console->then->setimeout
理解以后给你们看看我前端面试遇到的事件循环的面试题

      console.log("1");
      setTimeout(function(){
         console.log("2");
         proces.nextTick(function(){
            console.log("3");
         })
         new Promise(function(resolve){
            console.log("4");
            resolve();
         }).then(function(){
            console.log("5");
         })
      })
      process.nextTick(function(){
         console.log("6");
      })
      new Promise(function(resolve){
         console.log("7");
         resolve();
      }).then(function(){
         console.log("8");
      })

      setTimeout(function(){
         console.log("9");
         process.nextTick(function(){
            console.log("10");
         })
         new Promise(function(resolve){
            console.log("11")
            resolve();
         }).then(function(){
            console.log("12")
       })

    })
     //promise优先级比process.nextTick高

执行结果为

 1,7,6,8,2,4,3,5,9,11,10,12

这里记住 同是微任务promise优先级比process.nextTick高

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范天缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值