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版本的代码
Sep 03 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
Feb 07 Javascript
Javascript中的getUTCHours()方法使用详解
Jun 10 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
Jan 25 Javascript
基于javascript实现图片左右切换效果
Jan 25 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
JavaScript 数组- Array的方法总结(推荐)
Jul 21 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
Sep 11 Javascript
vue计算属性无法监听到数组内部变化的解决方案
Nov 06 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 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
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Python实现单词翻译功能
2017/06/06 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
小学生期末自我鉴定
2014/01/19 职场文书
创先争优标语
2014/06/27 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
店铺转让协议书
2015/01/29 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
党员证明信
2015/06/19 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
在Python中如何使用yield
2021/06/07 Python
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android