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 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
用javascript getComputedStyle获取和设置style的原理
Oct 10 Javascript
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
Nov 25 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
jQuery验证插件validation使用指南
Apr 21 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
js学习总结_选项卡封装(实例讲解)
Jul 13 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
Vue性能优化的方法
Jul 30 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
5款实用的python 工具推荐
2020/10/13 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
应届生护士求职信
2013/11/01 职场文书
仓库组长岗位职责
2014/01/29 职场文书
干部下基层实施方案
2014/03/14 职场文书
Python实现打乒乓小游戏
2021/09/25 Python
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers