JS - 事件循环和任务队列

栈、堆和队列

  • 栈:函数调用形成栈
  • 堆:对象的内容分配在堆中
  • 队列:一个 JavaScript 运行时包含了一个待处理的消息队列。在事件循环期间依次处理队列中的消息

事件循环

之所以称之为事件循环,是因为它经常按照类似如下的方式来被实现:

while (queue.waitForMessage()) {
  queue.processNextMessage();
}

如果当前没有任何消息,queue.waitForMessage() 会同步地等待消息到达。

任务队列

任务队列是指 macrotask queue,当 macrotask queue 空了(都处理完了)就开始处理 microtask queue,并且依次就将所有 microtask queue 都处理完(类似将 microtask queue 的所有任务合成为一个当 macrotask)。

  • macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
  • microtasks: process.nextTick, Promises, Object.observe, MutationObserver

参考

转载于:https://www.cnblogs.com/jffun-blog/p/11042979.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值