JavaScript中的宏任务(Macro Task)和微任务(Micro Task)执行顺序遵循一个规则:先执行当前宏任务的所有微任务,然后再执行下一个宏任务。
常见的宏任务包括:
- 整体的脚本代码
- setTimeout
- setInterval
- I/O操作
- UI渲染
- setImmediate(Node.js 环境)
常见的微任务包括:
- Promise
- Object.observe(已废弃)
- MutationObserver(HTML5新增)
- process.nextTick(Node.js 环境)
示例代码:
javascript">console.log('script start');setTimeout(function() {console.log('setTimeout');
}, 0);Promise.resolve().then(function() {console.log('promise1');
}).then(function() {console.log('promise2');
});console.log('script end');// 输出顺序为:
// script start
// script end
// promise1
// promise2
// setTimeout
在这个例子中,首先执行整体脚本的代码(宏任务),然后是Promise中的两个then方法注册的回调(微任务),最后是setTimeout(宏任务)。