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

setTimeout和Promise的任务队列

时间:2018-05-15 01:54:06      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:就是   先进先出   函数   浏览器   promise   settime   进入   需要   art   

栈,是指只有在一端进行存取的表结构。可以看做一个打开的箱子,永远只能对最上面的东西进行操作。也就是先进(栈底)后出(必须把上面的全都拿走),后进(栈顶)先出的顺序。

队列,是指排队过安检,先进先出。

在JS的单线程中,任务队列可以有多个。这些队列都是依靠函数调用栈来循环执行,这也就是我们常说的事件轮询。

任务队列包括宏任务(script全局,setTimeout,setInterval)和微任务(Promise)。

setTimeout和Promise作为任务分发器,将未来需要执行的任务分发到各自队列中。

Promise在每次事件循环的对尾。

从script(整体代码)开始第一次循环,全局上下文进入函数调用栈(栈底),如果有可执行代码就进行正常的入栈出栈,如果有上面提到的setTimeout和Promise,就将任务分发到各自队列,直到调用栈清空(只剩全局),然后执行所有的微任务队列(Promise队列),这就是第一次循环。当所有可执行的微任务执行完毕之后,循环再次从宏任务(setTimeout队列)开始执行入栈出栈任务分发等,执行完毕,然后再执行所有的微任务,第二次循环结束。。。这样一直循环下去,直到再也没有可执行的任务。这就是JS的循环机制。

等到浏览器关闭页面,在栈底的全局上下文才会出栈。

相关阅读:https://www.tuicool.com/articles/MnY7N3a

https://www.zhihu.com/question/36972010

 

setTimeout和Promise的任务队列

标签:就是   先进先出   函数   浏览器   promise   settime   进入   需要   art   

原文地址:https://www.cnblogs.com/Truke/p/9038857.html

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