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 相关文章推荐
获取当前网页document.url location.href区别总结
May 10 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
JQuery学习总结【一】
Dec 01 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
shiro授权的实现原理
Sep 21 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
关于TypeScript模块导入的那些事
Jun 12 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
小程序中手机号识别的示例
Dec 14 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数据库开发知多少
2006/10/09 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
python学习入门细节知识点
2018/03/29 Python
详解anaconda安装步骤
2020/11/23 Python
Javascript如何发送一个Ajax请求
2015/01/26 面试题
仓库管理制度
2014/01/21 职场文书
财务总经理岗位职责
2014/02/16 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技