JavaScript中的宏任务和微任务详情


Posted in Javascript onNovember 27, 2021

1、微任务有哪些

Promise

awaitasync

2、宏任务有哪些

setTimeout

setInterval

  • DOM事件
  • AJAX请求

3、案例

<script>

console.log(1)

setTimeout(()=>{

    console.log("2")

},0)

Promise.resolve().then(()=>{

    console.log('3')

})

console.log(4)

</script>

我们发现打印的顺序是1-4-3-2

为什么是这样的顺序?

先打印1-4这肯定是没有问题的

为啥先打印3然后才是2

因为3是Promise,Promise是微任务。

2是setTimeout,它是宏任务

微任务的执行时机比宏任务早。

所以先执行的是3然后才是2

JavaScript中的宏任务和微任务详情

3.1 结论

  • 先同步后异步,先微后宏
  • 微任务的执行时机比宏任务早哈~

4、代码案例

<body>

    <div id="app"></div>

<script>

// 这一段是dom渲染的

let app=document.getElementById("app")

let cont='<p>我是p标签</p>'

app.append(cont)

// dom渲染结束



console.log(1)

setTimeout(()=>{

    console.log("2")

    alert('setTimeout2')

},0)

Promise.resolve().then(()=>{

    console.log('3')

    alert('3')

})

console.log(4)

</script>

</body>

4.1 代码分析

上面这一段代码的执行分析:

肯定是先执行1-4

然后根据先微任务后宏任务

就是输出3然后弹出3

然后就是说输出2然后弹出setTimeout2 【错误的】

因为微任务和宏任务之间还有一个DOM渲染

所以然后是dom渲染,最后才是宏任务

所以输出1-4后,执行的是DOM渲染。

然后才是输出2然后弹出setTimeout2

4.2 结论和运用的场景

微任务》DOM渲染》宏任务 看下面的例子

这个结论的运用场景

我们都做过echarts.我们知道渲染echarts的时候。

需要页面的DOM渲染完毕后,才能拿到节点进行渲染。

所以有的小伙伴会请请求的时机放在monuted()这个生命周期中

这样就可以确保返回来的数据肯定能够正常渲染在页面上。

其实根据上面这个结论。

你完全可以在created中去请求数据。返回来的的时候。

DOM肯定渲染完了。因为请求是宏任务。

宏任务的执行时机是在DOM渲染后的哈

到此这篇关于JavaScript中的宏任务和微任务详情的文章就介绍到这了,更多相关JavaScript中的宏任务和微任务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Prototype Template对象 学习
Jul 19 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
Apr 14 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
深入探讨前端框架react
Dec 09 Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
什么是JavaScript中的结果值?
Oct 08 Javascript
JS获取年月日时分秒的方法分析
Nov 28 Javascript
jsonp跨域及实现百度首页联想功能的方法
Aug 30 Javascript
PostgreSQL Node.js实现函数计算方法示例
Feb 12 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
前端监听websocket消息并实时弹出(实例代码)
Vue实现跑马灯样式文字横向滚动
Nov 23 #Vue.js
利用js实现简单开关灯代码
Nov 23 #Javascript
详解Vue的列表渲染
Nov 20 #Vue.js
详解JS数组方法
Nov 20 #Javascript
详解Vue slot插槽
Nov 20 #Vue.js
详解Vue router路由
Nov 20 #Vue.js
You might like
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
python九九乘法表的实例
2017/09/26 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
python中怎么表示空值
2020/06/19 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
开朗女孩的自我评价
2014/02/10 职场文书
社会实践的活动方案
2014/08/22 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
护士年终个人总结
2015/02/13 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
话题作文之学会尊重
2019/12/16 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
python超详细实现完整学生成绩管理系统
2022/03/17 Python