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 相关文章推荐
通过url查找a元素并点击
Apr 09 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
Oct 27 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
Vue程序调试的方法
Jun 17 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 Javascript
vue中的循环对象属性和属性值用法
Sep 04 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 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 UTF8中文字符截断函数代码
2012/09/11 PHP
PHP编程函数安全篇
2013/01/08 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
分享php多功能图片处理类
2016/05/15 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
创建Django项目图文实例详解
2019/06/06 Python
Python登录系统界面实现详解
2019/06/25 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python中qutip用法示例详解
2020/10/02 Python
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
2013年保送生自荐信格式
2013/11/20 职场文书
2013年军训通讯稿
2014/02/05 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS