当前位置:首页 > javascript > 正文内容

js 宏任务和微任务

tigon5年前 (2020-07-27)javascript3247

首先讲粗略说一下宏任务和微任务
宏任务:script(整体代码), setTimeout, setInterval
微任务包括: Promise, MutationObserver(html5新特性),process.nextTick。

代码从上至下在执行过程,遇到Promise,new Promise直接执行,执行一个宏任务,过程中遇到微任务时,将其放到微任务的事件队列里,当前宏任务执行完成后,会查看微任务的事件队列,依次执行里面的微任务。如果还有宏任务的话,再重新开启宏任务……这个循环过程就是event Loop
网上找的一张图很好解释

看如下这个代码案例

console.log('a');

setTimeout(function() {
    console.log('b');
    process.nextTick(function() {
        console.log('c');
    })
    new Promise(function(resolve) {
        console.log('d');
        resolve();
    }).then(function() {
        console.log('e')
    })
})
process.nextTick(function() {
    console.log('f');
})
new Promise(function(resolve) {
    console.log('g');
    resolve();
}).then(function() {
    console.log('h')
})

setTimeout(function() {
    console.log('i');
    process.nextTick(function() {
        console.log('j');
    })
    new Promise(function(resolve) {
        console.log('k');
        resolve();
    }).then(function() {
        console.log('l')
    })
})
//a、g、f、h、b、d、c、e、i、k、j、l

个人理解来根据案例画了个图

注:可能有些人有各别几个不同,有的在node环境下执行出来的是有区别的,这个可能是在v8引擎和其它下面对于new promise的优先级是不同的吧

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=87

返回列表

上一篇:防抖和节流

下一篇:js原型链

“js 宏任务和微任务” 的相关文章

HTTP协议类

HTTP协议类

HTTP协议的主要特点    1,简单快速,每个资源是固定的,通过固定url就可以了    2,灵活  head有数据类型,一个HTTP协议可以完成不同数据类型的传输    3,无连接&nb...

数组有哪些原生方法

赋值方法:pop 和 push   pop // 删除数组最后一个元素,返回被删除的元素push // 在数组尾部插入1-N个元素,返回操作后数组的lengthshift     //  删除数组第一个元素,返回被删除的元素uns...

正则的规则

正则的两个特点:懒惰:如果没有设置全局g的情况下,只匹配1次,这时候的lastIndex的值是0贪婪:...

js 深浅拷贝

对象浅拷贝Object.assign,也可以做到浅拷 slice let obj=[11,22,33,44,['aa','bb','cc']] let aaa=obj.slice(0); aaa[4][0]='ccc' c...

js 判断数组,对象

arr=[1,2,3,4]; obj={a:'aaa'}; console.log(arr.constructor===Object) //false arr instanceof Array //true Object.prototype.toString.call(...

js原型链

js原型链

看到好的文章赶紧都收藏起来,但是有时收藏的太多内存不够呀,还是记录到我的博客上比较好,有时好的文章突然的某天就打不开了,那是多少痛的领悟,哈哈 文章转自 https://juejin.im/post/5d31ea79e51d457778117452...