event loop事件循环

了解event loop,我们先了解以下3点

①js是单线程

②异步基于回调实现

③event loop是异步回调的实现原理

我们来看个图

当检测到是同步任务时,该任务会直接移到调用栈里面再传给浏览器

调用栈-浏览器

当检测到是异步任务时,该任务会被放置到webAPI中即等待队列,当同步任务执行完,调用栈为空的时候,且该异步任务执行时机到了的时候,异步任务会被移到到回调队列

这时候event loop就会去回调队列找,如果回调队列有事件,event loop会获取他并把他转移到调用栈再转移到浏览器

等待队列-同步任务执行完毕,调用栈为空,异步任务执行时机到了-回调队列-event loop获取-调用栈-浏览器

 

这样说可能有点抽象,我们直接上例子

这个我们都知道输出答案为a,c,b 具体我们来看看

从上往下执行先是console.log('a'),该任务为同步任务,所以直接放置调用栈,再输出到浏览器,调用栈再清空

然后到定时器,这是个异步任务

先放在等待队列WebAPI

当满足以下3个条件,异步任务转移到回调队列

①同步任务执行完毕

②调用栈清空

③异步任务到达时机可执行

当异步任务定时器3s到的时候即到时机执行,异步任务转移到回调队列

同步任务执行完后,event loop开始运作,去回调队列找事件任务,找到后将其转移到调用栈

最后再将其传到浏览器,这就是event loop实现机制,也印证了上面的那句话,异步回调的原理是event loop

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值