【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

浙公网安备 33010602011771号