技术文摘
JavaScript 事件循环之微任务与宏任务图解
JavaScript 事件循环之微任务与宏任务图解
在 JavaScript 这门语言中,事件循环(Event Loop)是其运行机制的核心部分,而理解微任务(Microtask)和宏任务(Macrotask)则是掌握事件循环的关键。
宏任务包括常见的setTimeout、setInterval、setImmediate以及I/O操作等。这些任务会被放到宏任务队列中等待执行。当主线程执行完当前的同步代码后,会检查宏任务队列,如果有任务则取出并执行。
微任务则包括Promise.then、MutationObserver等。微任务队列的优先级高于宏任务队列。当同步代码执行完毕,且在执行下一个宏任务之前,会先处理微任务队列中的所有任务。
通过一个简单的例子来理解。假设我们有以下代码:
console.log('同步代码 1');
setTimeout(() => {
console.log('宏任务 1');
}, 0);
Promise.resolve().then(() => {
console.log('微任务 1');
});
console.log('同步代码 2');
在这个例子中,首先会执行同步代码,输出同步代码 1和同步代码 2。然后检查微任务队列,发现有Promise.then生成的微任务,输出微任务 1。最后检查宏任务队列,执行setTimeout回调,输出宏任务 1。
微任务和宏任务的这种执行顺序和优先级关系,对于处理异步操作的顺序和结果有着重要的影响。正确理解和运用它们,可以避免一些难以察觉的错误,并优化代码的性能和逻辑。
通过一张清晰的图解可以更直观地展示微任务和宏任务在事件循环中的执行流程。在图中,主线程用一条直线表示,宏任务队列和微任务队列分别用不同的框表示。箭头表示任务的执行顺序和流向。
从这张图中可以清晰地看到,同步代码总是优先执行,然后是微任务队列,最后才是宏任务队列。这种有序的执行机制保证了 JavaScript 程序的稳定运行和正确的异步处理逻辑。
深入理解 JavaScript 中的微任务和宏任务以及事件循环机制,对于编写高效、稳定的 JavaScript 代码至关重要。无论是在网页开发还是后端 Node.js 应用中,都能帮助我们更好地处理异步操作,提升程序的性能和用户体验。
TAGS: JavaScript 事件循环 图解 宏任务 微任务
- 设备摄像头拍照、预览及拍摄结果保存至媒体库的调用方法(Camera)
- ArkUI 水波纹动画的开发
- 前端 JS 安全对抗的原理及实践
- 基于 Spring Boot :Websockets 与 STOMP 消息推送的分步教学
- 在 Go 中利用 templ 编写 HTML 用户界面的方法
- Go 语言并发的强大力量
- 转转 One-Service 数据服务体系构建
- Python 中 Zipfile 压缩与 Tarfile 解压缩模块
- 必看!Python 3.12 功能更新大揭秘
- 应对 RocketMQ 消息堆积的方法
- 彻底搞懂 Java8 的 reduce 操作
- 五种注册中心的选型之道
- C#中 LINQ 的使用与常见功能整理及源代码解析
- 这个 17k star 的拖拽库不容小觑
- FileProvider 实现文件共享与访问的内容提供服务