JavaScript异步操作:setTimeout和Promise的输出结果及原因分析

2 min read
setTimeout(() => console.log('A'), 0);
Promise.resolve().then(() => console.log('B'));
console.log('C');

输出顺序会是C B A。原因是因为在主线程中执行代码时,console.log('C')先执行,然后setTimeout和Promise均被放置在任务队列(microtask队列和macrotask队列)中等待执行。Promise作为microtask优先级更高,其then方法里的回调函数会先于setTimeout的回调函数执行,因此输出顺序为C B A