【JS每日刷题】栈与任务队列1

代码

题目来源于前端面试题宝典

const foo = () => console.log('First')
const bar = () => setTimeout(() => console.log('Second'))
const baz = () => console.log('Third')

bar()
foo()
baz()

//最终输出 :First Third Second

原因分析

首先调用bar这个箭头函数中,它有一个setTimeout函数,该函数由WebAPI提供,当回调推送至WebAPI时,setTimeout将从栈弹出。

接着foo进入栈,输出结果,然后弹出

baz被也进入栈,然后被调用,输出结果。

最后由于WebAPI都已经拿走了setTimeout函数,再放回去多没面子,所以要把回调函数推到任务队列,于是就形成了事件循环

现在栈为空,则把队列的第一个元素bar推送入栈,输出Second

posted @ 2022-09-02 19:02  帕图纳克斯  阅读(38)  评论(0编辑  收藏  举报