彻底理解浏览器中的 Event Loop(事件循环)机制!

彻底理解浏览器中的 Event Loop(事件循环)机制!
为什么 setTimeout(fn, 0) 不会立即执行? Promise.then 和 setTimeout 谁先执行? 微任务、宏任务怎么区分?

这些问题都源于一个核心机制:Event Loop(事件循环)

🧠一句话总结:

JavaScript 是单线程语言,Event Loop 是它用来管理异步任务调度的机制。

🔧宏任务 vs 微任务:

类型示例何时执行宏任务setTimeout, setInterval, requestAnimationFrame每轮事件循环开始时执行微任务Promise.then, MutationObserver, queueMicrotask当前任务执行结束立即执行

📊执行顺序示例:

js

复制编辑

console.log('start')

setTimeout(() => console.log('timeout'), 0)

Promise.resolve().then(() => console.log('promise'))

console.log('end')

✅输出顺序:

arduino

复制编辑

start

end

promise

timeout

原因:

  1. start 和 end 是同步代码
  2. promise.then() 属于微任务,紧跟当前宏任务执行完立即执行
  3. setTimeout 是下一个宏任务,要等到微任务清空后再执行

🔁Event Loop 调度流程:

  1. 执行全局同步代码(同步阶段)
  2. 执行微任务队列(Promise.then 等)
  3. 执行下一个宏任务(如 setTimeout 回调)
  4. 重复步骤 2 → 3(循环进行)

🧠Tips:

  • 微任务总是在当前宏任务之后、下一个宏任务之前执行
  • 如果微任务队列不断填充,会阻塞宏任务执行(如无限 Promise.then)
  • 不要在微任务中写死循环,否则页面会卡死!

https://blog.csdn.net/qqqdqd/article/details/149209167

jrhz.info

https://blog.csdn.net/qqqdqd/article/details/149209090

https://blog.csdn.net/qqqdqd/article/details/149208922

https://blog.csdn.net/qqqdqd/article/details/149209254

https://blog.csdn.net/qqqdqd/article/details/149209491

https://blog.csdn.net/qqqdqd/article/details/149209582

https://blog.csdn.net/qqqdqd/article/details/149209652

猜你喜欢

爆!叶童深夜突发声:告别新白娘子传奇巡演舞台

说起叶童,那可是影视圈的一位传奇人物,尤其是她在《新白娘子传奇》中反串饰演的许仙,早已成为无数观众心中难以磨灭的经典形象。在她看来,美好的回忆之所以珍贵无比,正是因为用心去珍惜、呵护,而美好又常常稍纵即逝,所…

爆!叶童深夜突发声:告别新白娘子传奇巡演舞台

新颐空间大师 A8 VS IAM X8:从净化效率到外观颜值的深度较量

综合来看,新颐空间大师 A8在净化性能、智能功能以及外观设计等多个维度都展现出了较高的水准,尤其适合对空气净化要求较高、追求智能化体验以及有大空间使用需求的用户;而 IAMX8 也有着自身的优势,能较好…

新颐空间大师 A8 VS IAM X8:从净化效率到外观颜值的深度较量

如果GQuuuuuuX里面有独角兽高达和牛高达,会是这样的吗?

看完GQuuuuuuX之后,不知道有没有人脑补过GQuuuuuuX里面的独角兽高达会是怎么样的,又或者是GQuuuuuuX里面的牛高达会是怎么样的,而@RAVENX1Y00最近就整出来了这两台IF机体,一台…

如果GQuuuuuuX里面有独角兽高达和牛高达,会是这样的吗?

今年厦门计划新增5G基站1100个!重点园区加速数字化建设

作为重要的民生工程,今年厦门在为民办实事项目中明确计划新增5G基站1100个,待目标达成,全市5G基站数量将攀升至2万个,届时每万人5G基站数可达39个,为市民畅享高速网络提供坚实保障。 此外,厦门积极推动…

今年厦门计划新增5G基站1100个!重点园区加速数字化建设

探讨婚外情感中那些令人难以忘怀的女性特质与价值

探讨婚外情感中那些令人难以忘怀的女性特质与价值