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引用对象的方法
Jan 11 Javascript
javascript数组的扩展实现代码集合
Jun 01 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
canvas实现钟表效果
Feb 13 Javascript
@ResponseBody 和 @RequestBody 注解的区别
Mar 08 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
webpack3升级到webpack4遇到问题总结
Sep 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函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
PHP缓冲区用法总结
2016/02/14 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
php之可变函数的实例详解
2017/09/13 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
javascript 动态创建表格
2015/01/08 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
代码实例讲解python3的编码问题
2019/07/08 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Python 从attribute到property详解
2020/03/05 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
python中封包建立过程实例
2021/02/18 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
地质工程专业毕业生求职信
2014/08/08 职场文书
民政局未婚证明
2015/06/15 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL