正常任务(宏任务)和微任务

最近突然被问到关于正常任务(宏任务)和微任务的问题,学习js这么长时间来,还没有注意到js的任务还有宏任务和微任务的区别,在网上查找以后大概知道了什么是宏任务和微任务。

首先,宏任务包含:setTimeout/setInterval/setImmediate/整体代码script

而微任务包含:promise和process.nextTick

从结果来说,两者的区别在于在事件循环机制中,执行的机制不同,具体执行顺序是这样:

每次执行栈的同步任务执行完毕,就会去任务队列中取出完成的异步任务,队列中又分为microtasks queues和宏任务队列等到把microtasks queues所有的microtasks都执行完毕,注意是所有的,他才会从宏任务队列中取事件。等到把队列中的事件取出一个,放入执行栈执行完成,就算一次循环结束,之后event loop还会继续循环,他会再去microtasks queues执行所有的任务,然后再从宏任务队列里面取一个,如此反复循环。

同步任务执行完

去执行microtasks,把所有microtasks queues清空

取出一个macrotasks queues的完成事件,在执行栈执行

再去执行microtasks

...

...

...

所以结果上来看,当有宏任务和微任务同时在队列中时,微任务一般来说,执行的优先级较高,每次event loop都会清空一次微任务队列,而每个宏任务都会触发一次event loop

文章参考:https://yq.aliyun.com/articles/607031

猜你喜欢

转载自www.cnblogs.com/hyxlog/p/9284099.html
今日推荐