const bar = () => console.log('bar')
const baz = () => console.log('baz')
const foo = () => {
console.log('foo')
setTimeout(bar, 0)
new Promise((resolve, reject) =>
resolve('应该在 baz 之后、bar 之前')
).then(resolve => console.log(resolve))
baz()
}
foo()
setTimeout()调用时,浏览器或Node.js会启用定时器,定时器到达截止时间(例子中是0),会将回调函数存入“消息队列”,也可以理解为一个子任务。而promise异步调用,则会在当前工作队列(即baz())结束之后,立刻执行。
也可理解为三个优先级是:
一般函数>promise回调> setTimeout()