进阶与异步2026年1月20日星期二

事件循环

JS 如何处理并发。

广告

查看赞助商以支持 JS Fruggal。

JavaScript 是单线程的(单车道)。它有一个调用栈(Call Stack)。事件循环(Event Loop)是交通管制员,决定什么进入那个栈。

优先车道 (Microtasks)

并非所有任务都是平等的。
MacroTasks (setTimeout, setInterval): 普通车道。
MicroTasks (Promises, QueueMicrotask): VIP 车道。

事件循环总是在处理下一辆普通车 (setTimeout) 之前清空 VIP 车道 (Promesas)。

终极测验

在运行之前预测顺序。这是一个非常常见的面试问题。

console.log("1. 开始");

setTimeout(() => {
  console.log("2. 超时 (宏)");
}, 0);

Promise.resolve().then(() => {
  console.log("3. Promise (微)");
});

console.log("4. 结束");

/*
顺序逻辑:
1. "开始" (同步)
2. "结束" (同步)
3. "Promise" (微任务队列 - 优先级高)
4. "超时" (宏任务队列 - 优先级低)
*/
广告

查看赞助商以支持 JS Fruggal。