js 事件循环 异步/同步和宏任务/微任务
时间: 2024-08-13 16:09:20 浏览: 53
JavaScript 的事件循环(Event Loop)是 JavaScript 运行机制中的核心部分,负责处理异步操作和线程调度。它是 JavaScript 中实现非阻塞I/O和响应用户交互的关键。
**异步/同步:**
- **同步**(Synchronous):代码按照顺序执行,每个任务完成后才会执行下一个任务。如果某个任务耗时较长,将导致整个程序暂停直到该任务完成。
- **异步**(Asynchronous):代码执行不会被阻塞,当遇到异步任务(如定时器、网络请求或读取文件)时,JavaScript会继续执行后续的同步代码,而把异步任务放到后台等待处理,完成后通过回调、Promise 或 async/await 结合事件循环来通知主线程。
**宏任务/微任务:**
- **宏任务(Macrotask)**:指的是那些浏览器可以感知到的任务,比如脚本执行、UI渲染、DOM操作、setTimeout 和 setInterval 回调等。每次事件循环开始,都会先执行所有已排队的宏任务。
- **微任务(Microtask)**:微任务比宏任务优先级高,它们通常是在某些特定情况下生成的,例如 Promise 的 resolve 或 reject 时、MutationObserver 观察到 DOM 变化时、process.nextTick() 执行的内容。每当宏任务执行完毕,立即执行所有的微任务。
简而言之,事件循环的工作流程大致如下:
1. 执行当前同步代码块。
2. 如果有微任务,立即执行微任务。
3. 宏任务队列中如果有任务,执行宏任务。
4. 完成当前宏任务后,再次检查是否有微任务并执行。
5. 重复步骤3和4,直到没有更多任务。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)