超详细的EventLoop过程讲解

超详细的EventLoop过程讲解

EventLoop的主要过程:
首先我们需要知道js是单线程的,是基于事件循环。
1. 在主线程执行同步任务的时候,会形成一个执行栈; 2. 当主线程执行完执行栈中的同步任务,会先去执行微任务队列,执行过程中遇到微任务,直接放在队列的最后,直到执行完当前的微任务; 3. 然后主线程去执行宏任务队列中的一个事件(如果最先来的事件还没返回结果,那就去看第二先来的事件是否准备就绪,如果准备就绪就先执行它,否则继续向下找);在处理宏任务的过程中遇到微任务,会放入微任务队列中, 4. 当该宏任务处理完成之后,会再去执行微任务队列中的事件,执行完成之后才会去宏任务队列中执行,这样就形成了EventLoop,重复这样的过程直到执行完所有的任务。

   console.log(1);
    setTimeout(function(){
        console.log(2)
    },2000)
    setTimeout(function(){
        console.log(3)
    },0) 
    setTimeout(function(){
        console.log(4)
    },0)   //1 3 4 2 

主要的宏任务有:

setTimeout
setInterval
setImmedate
MessageChannel
requestAnimationFrame
I/O
UI交互事件

微任务有:

Promise.then
MutationObserver
Object.observe
process.nextTick

对于process.nextTick和setImmedate两个函数,都是Node.js提供的,因为node.js也是单线程,只不过运行机制和浏览器的不同而已。

在执行的过程中遇到process.nextTick,会将其放在当前执行栈的最后,也就是说它一定会在下一次事件循环前执行。
而对于setImmediate,它和setTimeout(fn,0)类似,总是在下一次EventLoop时执行。 关于这两个函数的详细描述,可以参考阮一峰大佬写的。

如果有什么不足的或错误的地方,还希望看官们及时指出。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哆啦咪唏

看到这里了,不留下点什么吗

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

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

打赏作者

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

抵扣说明:

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

余额充值