在 JavaScript
中,任务分为宏任务和微任务。
宏任务是指由宿主环境(例如浏览器)提供的任务,它们需要被放到任务队列中等待执行。常见的宏任务包括:定时器(setTimeout、setInterval)、事件监听器(如鼠标点击、键盘事件)、I/O 操作(如读取文件、发送 Ajax 请求)等。
微任务是指 JavaScript
引擎内部提供的任务,它们不需要被放到任务队列中,而是在当前任务执行完成后立即执行。常见的微任务包括:Promise 的回调函数、MutationObserver 的回调函数等。
具体来说,在每次执行完宏任务后,都要先执行所有微任务,然后才能执行下一个宏任务。微任务的执行顺序优先于宏任务。
如下图所示:
举个例子,假设有如下代码:
jsconsole.log("1");
setTimeout(() => {
console.log("2");
}, 0);
Promise.resolve().then(() => {
console.log("3");
});
console.log("4");
这段代码中,首先会执行同步代码,即输出 "1" 和 "4"。然后,宏任务队列中加入一个定时器任务,微任务队列中加入一个 Promise 的回调函数。接着,先执行微任务队列中的回调函数,输出 "3",然后再执行定时器任务,输出 "2"。
因此,最终的输出结果为:
1 4 3 2
本文作者:叶继伟
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!