JavaScript 中的正常任务与微任务

Posted 没离开过

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 中的正常任务与微任务相关的知识,希望对你有一定的参考价值。

正常情况下,javascript的任务是同步执行的,即执行完前一个任务,然后执行后一个任务。只有遇到异步任务的情况下,执行顺序才会改变。

这时,需要区分两种任务:正常任务(task)与微任务(microtask)。它们的区别在于,“正常任务”在下一轮Event Loop执行,“微任务”在本轮Event Loop的所有任务结束后执行。

console.log(1);

setTimeout(function() {
  console.log(2);
}, 0);

Promise.resolve().then(function() {
  console.log(3);
}).then(function() {
  console.log(4);
});

console.log(5);

// 1
// 5
// 3
// 4
// 2

上面代码的执行结果说明,setTimeout(fn, 0)Promise.resolve之后执行。

这是因为setTimeout语句指定的是“正常任务”,即不会在当前的Event Loop执行。而Promise会将它的回调函数,在状态改变后的那一轮Event Loop指定为微任务。所以,3和4输出在5之后、2之前。

正常任务包括以下情况。

  • setTimeout
  • setInterval
  • setImmediate
  • I/O
  • 各种事件(比如鼠标单击事件)的回调函数

微任务目前主要是process.nextTick和 Promise 这两种情况。

 

原文链接:http://javascript.ruanyifeng.com/advanced/timer.html

 

以上是关于JavaScript 中的正常任务与微任务的主要内容,如果未能解决你的问题,请参考以下文章

javaScript-宏任务与微任务/事件轮询

JavaScript之事件循环,宏任务与微任务

20230515学习笔记——js中的同步任务与异步任务,宏任务与微任务

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

[JS]事件循环怎么处理宏任务与微任务

[JS]事件循环怎么处理宏任务与微任务