标签:就是 先进先出 函数 浏览器 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
标签:就是 先进先出 函数 浏览器 promise settime 进入 需要 art
原文地址:https://www.cnblogs.com/Truke/p/9038857.html