𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 同步与异步
JavaScript 在单线程上运行。这意味着它一次只能执行一件事。你需要了解它是如何处理任务的,以便编写高效的代码。
同步 JavaScript
同步代码逐行运行。每个任务都会等待前一个任务完成。这被称为“阻塞”(blocking)。如果一个任务耗时较长,整个程序都会停止。
- 执行:固定顺序。
- 阻塞:是。
- 复杂度:简单。
- 适用场景:简单的顺序任务。
异步 JavaScript
异步代码独立运行。任务在等待时不会阻塞其他代码。这被称为“非阻塞”(non-blocking)。任务在后台开始运行,并在完成后通知你。
- 执行:任务独立运行。
- 阻塞:否。
- 复杂度:较高。
- 适用场景:API 调用、定时器和文件操作。
处理异步任务的三种方式:
- Callbacks:任务完成后运行的函数。
- Promises:代表操作完成或失败的对象。
- Async/Await:最简洁的方法。它使异步代码在不阻塞线程的情况下,看起来像同步代码一样。
常见的异步操作:
- 定时器:
setTimeout() - API 调用:
fetch() - 文件读取:
readFile() - 用户事件:
addEventListener()
Event Loop(事件循环)实现了这一机制。它利用 Call Stack(调用栈)、Web APIs 和 Callback Queue(回调队列)来同时管理多个任务。
总结:
- 同步:一个接一个。阻塞执行。
- 异步:独立任务。不阻塞。
- JavaScript 默认方式:同步。
Source: https://www.geeksforgeeks.org/javascript/synchronous-and-asynchronous-in-javascript/ Source: https://www.w3schools.com/js/js_asynchronous.asp Source: https://medium.com/@mohdtalib.dev/what-is-synchronous-and-asynchronous-in-javascript-07adb7b4cc5f
Full post: https://dev.to/raja_b_0c9d242e2c26cf063b/javascript-synchronous-and-asynchronous-2a69