前端几乎所有耗时操作——请求接口、读文件、定时器——都是异步的。理解 Promise、
async/await与事件循环的宏微任务,是写好前端代码的分水岭。
1. 为什么必须异步
JS 是单线程的:同一时刻只跑一段代码。如果请求接口是同步阻塞的,整个页面就会卡死——网络往返可能几百毫秒到几秒,期间用户点不动、界面不刷新。
所以 JS 的做法是:发请求不阻塞,先把控制权交回浏览器,拿到结果后再执行回调。这就是「非阻塞 I/O + 事件循环」。
2026/10/11大约 6 分钟
前端几乎所有耗时操作——请求接口、读文件、定时器——都是异步的。理解 Promise、
async/await与事件循环的宏微任务,是写好前端代码的分水岭。
JS 是单线程的:同一时刻只跑一段代码。如果请求接口是同步阻塞的,整个页面就会卡死——网络往返可能几百毫秒到几秒,期间用户点不动、界面不刷新。
所以 JS 的做法是:发请求不阻塞,先把控制权交回浏览器,拿到结果后再执行回调。这就是「非阻塞 I/O + 事件循环」。
JavaScript(JS)是页面的行为层:响应用户操作、请求后端、更新 DOM。它和 Java 名字相似,语言模型却完全不同——动态类型、单线程、基于原型。
Java 是静态类型 + 编译期检查:变量类型写死在声明里,编译不过就发不出去。JS 是动态类型 + 运行期决定:变量不绑类型,赋值时就地决定,运行时才暴露类型错误。
let x = 1; // 数字
x = "hello"; // 立刻变成字符串,不报错
x = { a: 1 }; // 又变成对象