返回顶部
首页 > 问答 > 前段 > JavaScript 中的微任务和宏任务有什么区别?
0
待解决

JavaScript 中的微任务和宏任务有什么区别?

  • 匿名发布
  • 2023-05-09
  • 发布在 问答/前段
38

其他回答4

嗯哼hi

2023-06-14

JavaScript 中的微任务(microtask)和宏任务(macrotask)都是异步任务,但它们之间有一些关键的区别。

宏任务是由浏览器在主事件循环之外调度的任务。常见的宏任务包括 setTimeout、setInterval、ajax 请求、DOM 事件等。它们会被添加到任务队列中,等待主事件循环来执行。

微任务是在当前任务执行结束后立即执行的任务。它们执行时机比宏任务要早。常见的微任务包括 Promise 的 then 方法、MutationObserver、Object.observe 等。它们会被添加到微任务队列中,等待主事件循环执行栈中的任务执行结束后执行。

下面是一个演示代码,用来展示微任务和宏任务之间的区别:

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")

上述代码中,我们使用了 setTimeout 和 Promise 来创建了一个宏任务和两个微任务。当代码执行时,会按照以下顺序输出:

script start
script end
promise1
promise2
setTimeout

可以看到,微任务会在当前任务执行完毕后立即执行,而宏任务则需要等待主事件循环来执行。

fangke2010

2023-06-14

JavaScript 中的微任务(microtask)和宏任务(macrotask)是指在 JavaScript 引擎中执行的两种不同的任务队列。

宏任务包括 setTimeout、setInterval、I/O 操作等,而微任务包括 Promise、Object.observe、MutationObserver 等。

宏任务队列中的任务会在当前执行栈执行完毕后立即执行,而微任务队列中的任务会在当前任务执行完毕后立即执行,但在下一个宏任务之前执行。

下面是一个简单的例子,演示了微任务和宏任务的执行顺序:

console.log("1");

setTimeout(function() {
  console.log("2");
  Promise.resolve().then(function() {
    console.log("3");
  });
});

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

console.log("5");

上述代码中,先输出 1 和 5,然后执行 Promise 的微任务,输出 4,接着执行 setTimeout 的宏任务,输出 2,然后执行 Promise 的微任务,输出 3。

因此,输出的顺序是:1、5、4、2、3。

草蛋的人生失败者

2023-06-14

JavaScript 中的任务分为两种类型:微任务和宏任务。微任务优先级高于宏任务,即在同一事件循环中,先执行完微任务再执行宏任务。下面是它们的区别和演示代码:

  1. 宏任务:包括整体代码 script,setTimeout,setInterval,setImmediate,I/O 操作等。

演示代码:

console.log("1");

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

console.log("3");

输出:

1
3
2
  1. 微任务:包括 Promise,process.nextTick,Object.observe 等。

演示代码:

console.log("1");

Promise.resolve().then(function() {
  console.log("2");
});

console.log("3");

输出:

1
3
2

可以看到,微任务先于宏任务执行。在上面的代码中,先输出了 1 和 3,然后 Promise 产生了一个微任务,它的回调函数是输出 2,所以 2 最后输出。

小白鱼2010

2023-06-14

JavaScript 中的任务分为宏任务和微任务两类。宏任务包括 script、setTimeout、setInterval、I/O 操作等异步任务,而微任务包括 Promise、MutationObserver 等异步任务。

宏任务的执行顺序是按照它们进入宏任务队列的顺序执行的,而微任务的执行顺序是在当前宏任务执行完毕后立即执行的。

下面是一个示例代码,可以直观地理解微任务和宏任务的区别:

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

可以看到,即使 setTimeout 的延迟时间为 0,它也是在 Promise 的两个微任务执行完毕后才执行的,说明微任务的执行优先级高于宏任务。

相关问题
2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

2

回答

99+

浏览

相关文章
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作