JavaScript 事件循环:为什么 setTimeout(0) 不能让你插队?

前端技术 Sep 22, 2020

经典面试题

console.log("1");
setTimeout(() => console.log("2"), 0);
Promise.resolve().then(() => console.log("3"));
console.log("4");

结果:1, 4, 3, 2

JavaScript 是单线程的,事件循环让它能处理异步任务。

微任务(Promise.then)是 VIP,宏任务(setTimeout)是普通队。每执行完一个宏任务,就清空所有微任务。

setTimeout(0) 把代码推迟到同步任务和微任务执行完再说。

Tags