首页 > web前端 > js教程 > 正文

异步 JavaScript 中微任务队列和回调队列有什么区别?

PHPz
发布: 2023-08-24 09:33:02
转载
596人浏览过

异步 javascript 中微任务队列和回调队列有什么区别?

在异步 JavaScript 中,有两种方法来调度任务 - 微任务队列回调队列。 JavaScript 引擎对这两个队列的处理方式不同。

微任务队列

微任务队列是在当前任务之后执行的任务队列。微任务队列由 JavaScript 引擎处理,然后再移至回调队列中的下一个任务。

示例

以下是微任务队列如何工作的示例 -

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      console.log('start');
 
      setTimeout(function() {
         console.log('setTimeout');
      }, 0);
 
      Promise.resolve().then(function() {
         console.log('promise resolve');
      });
 
      console.log('end');
   </script>
</body>
</html>
登录后复制

在上面的示例中,“setTimeout”回调被添加到回调队列中。 “Promise.resolve”被添加到微任务队列中。 JavaScript 引擎将首先执行微任务队列中的所有任务,然后再进入回调队列。

立即学习Java免费学习笔记(深入)”;

因此,上面代码的输出将是(在控制台中) -

start
end
promise resolve
setTimeout
登录后复制

回调队列

回调队列是在当前任务之后执行的任务队列。 回调队列由 JavaScript 引擎在执行完微任务队列中的所有任务后处理。

示例

以下是回调队列如何工作的示例-

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      console.log('start');
 
      setTimeout(function() {
         console.log('setTimeout');
      }, 0);
 
      console.log('end');
   </script>
</body>
</html>
登录后复制

在上面的示例中,‘setTimeout’回调被添加到回调队列中。 JavaScript 引擎在执行完当前任务中的所有代码后将执行“setTimeout”回调。

因此,上面代码的输出将是(在控制台中) -

start
end
setTimeout
登录后复制

微任务队列和回调队列之间的区别

微任务队列和回调队列之间的一些区别是 -

  • Microtask 队列由 JavaScript 引擎处理,然后再移至回调队列中的下一个任务。 回调队列由JavaScript引擎在执行完微任务队列中的所有任务后处理。

  • Microtask队列当前任务完成后进行处理。 回调队列在微任务队列为空后进行处理。

  • 微任务队列在单独的事件循环中进行处理。 回调队列在同一个事件循环中进行处理。

  • 微任务队列的优点

    微任务队列的一些优点回调队列上的微任务队列是 -

    • 微任务队列在单独的事件循环中处理,这意味着如果主线程被阻塞,微任务队列仍将

    • 微任务队列在当前任务完成后进行处理,这意味着任何依赖于当前任务的代码都可以添加到微任务队列中,并且它将被处理。当前任务完成后立即执行。

    • 微任务队列比回调队列具有更高的优先级,这意味着如果两个队列被安排同时执行,微任务队列将首先执行。

    回调队列的优点

    回调队列相对于微任务队列的优点之一是回调队列与主线程在同一事件循环中进行处理。这意味着如果主线程被阻塞,回调队列将不会被处理。

    结论

    在本教程中,我们研究了微任务队列和回调队列之间的区别在异步 JavaScript 中。我们还研究了每个队列的优点。

    以上就是异步 JavaScript 中微任务队列和回调队列有什么区别?的详细内容,更多请关注php中文网其它相关文章!

    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载
    来源:tutorialspoint网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习
    PHP中文网抖音号
    发现有趣的

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号