同步 vs. 异步 JavaScript:真实案例解释

发布: (2025年12月7日 GMT+8 02:35)
3 min read
原文: Dev.to

Source: Dev.to

Introduction

JavaScript 默认逐行(同步)执行代码,但它可以通过异步操作(例如 setTimeoutfetch、回调函数)来避免阻塞主线程。

在本指南中我们将讨论:

  • 同步代码如何顺序运行
  • 异步操作如何使用回调
  • 一个真实场景的餐厅类比
  • Web API、回调队列和事件循环的角色

Synchronous Execution

除非另有指示,JavaScript 会顺序执行代码。

console.log("Step 1: Enter the restaurant");
console.log("Step 2: Order a burger");
console.log("Step 3: Pay for the meal");

Output

Step 1: Enter the restaurant
Step 2: Order a burger
Step 3: Pay for the meal

每一行都会等前一行执行完毕后才继续。

Asynchronous Execution

某些任务(API 调用、定时器等)需要时间。与其等待,JavaScript 会把它们交给浏览器的 Web API 处理,然后继续执行其他代码。

console.log("Step 1: Order food");
setTimeout(() => console.log("Step 2: Food is ready!"), 3000);
console.log("Step 3: Drink a soda");

Output

Step 1: Order food
Step 3: Drink a soda

(3 秒后)

Step 2: Food is ready!

setTimeout 在后台运行,使脚本的其余部分能够继续执行。

How It Works

  • Call Stack – 按行执行同步代码。
  • Web APIs – 在主线程之外处理 setTimeoutfetch 等异步任务。
  • Callback Queue – 保存已完成异步任务的回调函数。
  • Event Loop – 当调用栈为空时,将回调从队列移入调用栈。

Real‑World Analogy (Restaurant)

  1. 你点餐setTimeout 开始计时。
  2. 厨房(Web APIs) 在后台烹饪。
  3. 你喝汽水 – 其他代码在食物准备期间运行。
  4. 食物准备好后,放在柜台上(Callback Queue)。
  5. 服务员(Event Loop) 只有在你空闲时(调用栈为空)才把食物端给你。

Key Takeaways

  • JavaScript 默认是同步的,但支持异步操作。
  • 异步任务(fetchsetTimeout 等)通过 Web API 在后台运行。
  • async/await 为编写不阻塞执行的异步代码提供了更简洁的语法。
  • 事件循环在主线程空闲时协调异步回调的执行。

Conclusion

理解同步与异步 JavaScript 对于构建高效、非阻塞的应用至关重要。无论是获取数据、设置定时器还是处理用户输入,掌握异步编程都能确保流畅的性能。

🚀 现在你已经了解 JavaScript 如何处理异步操作——去构建更快的应用吧!

Back to Blog

相关文章

阅读更多 »

JavaScript 中的对象

什么是对象? - 对象是一种可以容纳多个变量的变量。 - 它是键‑值对的集合,每个键都有对应的值。 - 组合……