JS的事件循环理解

早年曾写了一篇事件循环的学习笔记,Jake Archibald: In The Loop【事件循环学习笔记】,不过这个以视屏学习为主流程,今天再写一篇,对事件循环做个补充.

一. 为什么需要事件循环

因为js是一门单线程语言,但是我们因为需要调用接口或者进行其他需要延时的操作,如果是单线程,就会阻塞整个进程.所以实现单线程非阻塞的方法就是事件循环.

在JS中任务大致分为两种:

  • 同步任务:可以立即执行,同步任务一般会直接进入到主线程中执行.
    注意: new Promise 是同步任务,可以进入主线程
  • 异步任务:异步进行的任务,例如setTimeout等等

二.宏任务和微任务

异步任务也分为两种:

  • 微任务:一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前
    常见微任务:promise.then,process.nextTick,MutaionObserver

  • 宏任务:时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求就不太符合
    常见宏任务: script(外层同步代码);setTimeout/setIntervel;setImmediate;UI rendering

事件循环,宏任务,微任务的关系在另一篇文章写了,就不再重复

看一个例子:

console.log(1)
setTimeout(()=>{
   
    console.log(2)
}, 0)
new Promise((resolve, reject)=>{
   
    console.log('new Promise'
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值