JavaScript 中,任务分为宏任务和微任务。

宏任务是指由宿主环境(例如浏览器)提供的任务,它们需要被放到任务队列中等待执行。常见的宏任务包括:定时器(setTimeout、setInterval)、事件监听器(如鼠标点击、键盘事件)、I/O 操作(如读取文件、发送 Ajax 请求)等。

微任务是指 JavaScript 引擎内部提供的任务,它们不需要被放到任务队列中,而是在当前任务执行完成后立即执行。常见的微任务包括:Promise 的回调函数、MutationObserver 的回调函数等。

具体来说,在每次执行完宏任务后,都要先执行所有微任务,然后才能执行下一个宏任务。微任务的执行顺序优先于宏任务。

如下图所示:

image.png

举个例子,假设有如下代码:

js
console.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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:叶继伟

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!