宏任务和微任务

本文深入探讨JavaScript的执行机制,重点讲解宏任务与微任务的区别及其执行顺序。通过示例代码解释了宏任务(如setTimeout、AJAX)和微任务(如Promise、process.nextTick)的执行流程,说明了微任务在处理实时性和效率间平衡的作用。理解这一机制对于优化JavaScript代码性能至关重要。
摘要由CSDN通过智能技术生成
  • 微任务执行时机比宏任务早
  • 宏任务:script(整体代码)、 setTimeout、 setInterval、setImmediate、 DOM事件、AJAX请求
  • 每一个宏任务都单独关联了一个微任务队列
  • 微任务:Promise.then、.catch、.finally、process.nextTick、Object.observe、MutationObserver
  • 优先级:同步>>>process.nextTick>>>微任务>>>宏任务>>>setTmmediate

微任务、宏任务都可以操作异步,那微任务要解决怎样的问题
主线程任务过多的时候,异步回调等待时间可能会过长,微任务可以在实时性和效率之间做一个有效权衡。

// 主线程任务
console.log(1)
// 异步任务——宏任务
setTimeout(() => {
	console.log(2)
}, 0)
// 异步——主线程任务
new Promise((resolve) => {
	resolve()
	console.log(3)
})
// 异步——微任务
Promise.resolve().then(() => {
	console.log(4)
})
// 主线程任务
console.log(5)

打印结果: 1,3,5,4,2

宏任务和微任务都是怎样执行的

  1. 执行宏任务script,
  2. 进入script后,所有的同步任务主线程执行
  3. 所有宏任务放入宏任务执行队列
  4. 所有微任务放入微任务执行队列
  5. 先清空微任务队列,
  6. 再取一个宏任务,执行,再清空微任务队列
  7. 依次循环
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值