Promise
|
|
答案:2 3 5 4 1
- 首先执行script下的宏任务,遇到
setTimeout
,将其放到宏任务的【队列】中。 - 遇到
new Promise
直接执行,打印2 - 遇到
for
循环直接执行,遇到then
方法是微任务,放到【队列】中 - 打印3
- 打印5
- 本轮宏任务执行完成,查看本轮微任务,打印4
- 到此,本轮的 event loop 全部完成
- 下一轮中,执行一个宏任务,发现宏任务【队列】中有一个
setTimeout
函数,打印1
setTimeout()
|
|
一般我们对这段代码的理解是,3秒后打印执行了
,但是这种说法并不严谨。准确来说,是3秒后,会把setTimeout()
里的函数推入event queue,而event queue中的任务,只有在主线程空闲时才会执行。
所以只有满足(1)3秒后(2)主线程空闲时,才会执行该函数。
如果主线程执行任务很多,执行时间超过了3秒,比如执行了10秒,那么这个函数只能10秒后执行。
参考文章: