js中的宏任务和微任务详细讲解

简介: js中的宏任务和微任务详细讲解

微任务有哪些


Promise
await和async


宏任务有哪些


setTimeout
setInterval
DOM事件
AJAX请求


看下面的代码


<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


1425695-20211120220823850-1885710494.png

我的结论


先同步后异步,先微后宏


微任务的执行时机比宏任务早哈~


说说下面代码的执行时机


<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>


上面这一段代码的执行分析


肯定是先执行1-4


然后根据先微任务后宏任务


就是输出3然后弹出3


然后就是说输出2然后弹出setTimeout2 【错误的】


因为微任务和宏任务之间还有一个DOM渲染


所以然后是dom渲染,最后才是宏任务


所以输出1-4后,执行的是DOM渲染。


然后才是输出2然后弹出setTimeout2


结论和运用的场景


微任务》DOM渲染》宏任务 看下面的例子


这个结论的运用场景


我们都做过echarts.我们知道渲染echarts的时候。


需要页面的DOM渲染完毕后,才能拿到节点进行渲染。


所以有的小伙伴会请请求的时机放在monuted()这个生命周期中


这样就可以确保返回来的数据肯定能够正常渲染在页面上。


其实根据上面这个结论。


你完全可以在created中去请求数据。返回来的的时候。


DOM肯定渲染完了。因为请求是宏任务。


宏任务的执行时机是在DOM渲染后的哈


1425695-20211120220832763-358753272.gif


求求你了看官


如果你觉得我写的还不错的话~~


请你给我点个一个推荐或者关注我!!


或者请我买一包辣条谢谢你了~~~

相关文章
|
4月前
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
3月前
|
JavaScript 前端开发 调度
在JavaScript中异步任务里的微任务和宏任务的特点和生命周期
在JavaScript中异步任务里的微任务和宏任务的特点和生命周期
51 0
|
4月前
|
前端开发 JavaScript API
JavaScript 的宏任务和微任务有什么区别
【9月更文挑战第6天】JavaScript 的宏任务和微任务有什么区别
103 4
|
5月前
|
存储 前端开发 JavaScript
JavaScript 并发任务控制
【8月更文挑战第31天】JavaScript 并发任务控制
56 2
|
2月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
35 1
JavaScript中的原型 保姆级文章一文搞懂
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
114 2
|
2月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
22 0
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
160 4
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
91 4
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物交易平台附带文章源码部署视频讲解等
84 4