JavaScript 是单线程的(单车道)。它有一个调用栈(Call Stack)。事件循环(Event Loop)是交通管制员,决定什么进入那个栈。
优先车道 (Microtasks)
并非所有任务都是平等的。
• MacroTasks (setTimeout, setInterval): 普通车道。
• MicroTasks (Promises, QueueMicrotask): VIP 车道。
事件循环总是在处理下一辆普通车 (setTimeout) 之前清空 VIP 车道 (Promesas)。
终极测验
在运行之前预测顺序。这是一个非常常见的面试问题。
javascript
console.log("1. 开始");
setTimeout(() => {
console.log("2. 超时 (宏)");
}, 0);
Promise.resolve().then(() => {
console.log("3. Promise (微)");
});
console.log("4. 结束");
/*
顺序逻辑:
1. "开始" (同步)
2. "结束" (同步)
3. "Promise" (微任务队列 - 优先级高)
4. "超时" (宏任务队列 - 优先级低)
*/