<!-- title: 异步不属于JS：单线程靠浏览器接活 -->
# 异步不属于JS：单线程靠浏览器接活

## 导语

如果你写过 JavaScript，大概率被问过一道面试题："`setTimeout(fn, 0)` 为什么不是立刻执行？"再进阶一点："`Promise.then` 和 `setTimeout` 谁先执行？"绝大多数人的答案是"因为 JS 有事件循环（event loop）"。这话只对了一半——而且这个"一半"恰恰掩盖了最关键的认知盲点。

Philip Roberts 在 JSConf EU 2014 上的这场演讲《What the heck is the event loop anyway?》，是整个 JavaScript 社区被引用最多的单场技术演讲之一，截至 2026 年 7 月累计 **377 万播放、10.4 万点赞**。它的价值不在于教你写代码，而在于用一个可视化工具把"JS 运行时"和"浏览器宿主环境"的边界彻底划清。看完你会意识到一个反直觉的事实：**异步从来不是 JavaScript 语言本身的本事，而是浏览器（或 Node 的 libuv）在背后帮你接活、再把结果扔回来的结果**。这个视角一旦建立，回调地狱、