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 相关文章推荐
JavaScript 获取事件对象的注意点
Jul 29 Javascript
JavaScript toFixed() 方法
Apr 15 Javascript
jQuery+css实现图片滚动效果(附源码)
Mar 18 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
webpack热模块替换(HMR)/热更新的方法
Apr 05 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
React生命周期原理与用法踩坑笔记
Apr 28 Javascript
JavaScript实现简单日历效果
Sep 11 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下MAIL的另一解决方案
2006/10/09 PHP
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
python re模块的高级用法详解
2018/06/06 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
医学实习生自我鉴定
2013/12/12 职场文书
铁路个人事迹材料
2014/01/30 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
拔河比赛口号
2014/06/10 职场文书
教师师德考核自我评价
2014/09/13 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
李强感恩观后感
2015/06/17 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
Redis 限流器
2022/05/15 Redis