码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-09 16:33:50      阅读:1496      评论:0      收藏:0      [点我收藏+]

标签:优先   就会   没有   区别   data   参考   spm   rip   顺序   

最近突然被问到关于正常任务(宏任务)和微任务的问题,学习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

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

标签:优先   就会   没有   区别   data   参考   spm   rip   顺序   

原文地址:https://www.cnblogs.com/hyxlog/p/9284099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!