JavaScript事件循环是单线程异步执行的核心机制,通过协调调用栈、宏任务队列与微任务队列实现;每轮先执行一个宏任务,再清空所有微任务,最后渲染(浏览器),确保微任务总优先于下一宏任务执行。

JavaScript 的事件循环(Event Loop)是它实现单线程异步执行的核心机制。它不靠多线程,而是通过协调调用栈、任务队列和微任务队列,让异步操作(如定时器、网络请求、Promise)能在主线程空闲时有序执行。
调用栈与任务的执行顺序
JS 是单线程语言,所有同步代码都在调用栈中按顺序执行。一旦遇到异步操作(比如 setTimeout 或 fetch),JS 引擎不会卡住等待结果,而是把回调函数交给宿主环境(如浏览器或 Node.js)去处理。等异步条件满足后,回调被推入对应的任务队列,等待事件循环调度。
- 同步任务直接进入调用栈,执行完即出栈
- 宏任务(macrotask)如
setTimeout、setInterval、I/O回调,进入宏任务队列 - 微任务(microtask)如
Promise.then、queueMicrotask、MutationObserver,进入微任务队列
事件循环的三步工作流程
每次循环,事件循环按固定顺序推进:
- 先执行一个宏任务(比如从宏任务队列取一个
setTimeout回调) - 宏任务执行完毕后,立即清空当前所有微任务(逐个执行,且新加入的微任务也会在本轮执行完)
- 渲染(浏览器环境)→ 下一轮循环,再取下一个宏任务
这意味着:微任务总比下一个宏任务更早执行。例如 Promise.then 一定在 setTimeout 之前运行,哪怕后者先定义。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java js node.js node 浏览器 回调函数 工具 mac 栈 异步任务
还木有评论哦,快来抢沙发吧~