setTimeout = consolelog4 new Promise resolve = resolve consolelog1 then = consolelog3 consolelog2 A、4-1-3-2 B、2-4-1-2 C、2-1-3-4 D、1-2-3-4
答案是 C、2-1-3-4。
首先,console.log(2)会先执行,输出2。
然后,遇到了一个Promise对象,它是一个异步操作,会被放入微任务队列中。所以,console.log(1)不会立即执行,先让Promise对象进入队列。
接下来,遇到了一个setTimeout函数,它也是一个异步操作,会被放入宏任务队列中。因为宏任务队列的优先级低于微任务队列,所以console.log(4)会被放到宏任务队列的末尾。
现在,执行栈中没有任务了,开始执行微任务队列中的任务。Promise对象的状态是resolved,所以.then中的回调函数会被放入微任务队列中。它会输出3。
执行完微任务队列中的任务后,开始执行宏任务队列中的任务。此时,console.log(4)会被执行,输出4。
最后,执行栈中也没有任务了,程序结束。
原文地址: http://www.cveoy.top/t/topic/biwD 著作权归作者所有。请勿转载和采集!