普通视图

发现新文章,点击刷新页面。
今天 — 2025年5月17日首页

js中是否存在真正的异步?

作者 tianchang
2025年5月16日 23:29

JavaScript 本身没有“异步执行”的能力,所谓异步,其实都是“通过回调 + 事件循环机制实现的异步行为”。


🔹 1. JS 是单线程的语言

JavaScript 的运行环境(如浏览器、Node.js)中,JS 本身只在主线程中执行,不能同时干两件事。比如:

console.log(1) 
setTimeout(() => console.log(2), 1000) 
console.log(3)`

虽然 setTimeout 看起来是“异步的”,但本质上:

  • setTimeout 把回调函数登记给浏览器或 Node 的 “定时器模块”

  • JS 主线程继续执行;

  • 等 1 秒后,事件循环机制(Event Loop) 将回调函数“推”到 JS 主线程队列中执行。

所以 JS 本身没有“异步线程”,异步操作是环境提供的能力(浏览器/Node 的 Web APIs)。


🔹 2. 所有异步行为,归根结底都是「延迟执行的回调函数」

举例:PromisesetTimeoutfetchasync/await,都可以还原为回调逻辑。

setTimeout(() => console.log('A'), 1000)

==就是注册一个回调函数==,延迟执行。


🔹 3. Promise 也只是对“回调”的封装

new Promise((resolve) => {   setTimeout(() => {     resolve('done')   }, 1000) }).then(result => {   console.log(result) })

核心仍然是:注册回调,只不过 .then 把回调收敛到一个更好管理的语法结构中。

❌
❌