不会。微任务队列清空前,resize 和 scroll 事件不会被触发,因其属于宏任务,需等待当前宏任务结束且微任务队列清空后才被浏览器批量收集并推入宏任务队列。

不会。微任务队列清空前,resize 和 scroll 事件不会被触发。
微任务执行期间不处理新产生的 UI 事件
resize 和 scroll 是用户交互或视口变化引发的宏任务(属于任务队列),它们的回调函数只有在当前宏任务执行完毕、微任务队列清空后,才会被推入宏任务队列等待下一轮事件循环。在微任务执行过程中,即使窗口被拖拽或页面滚动,这些事件不会立即派发,而是被浏览器暂存,等到微任务全部执行完、进入下一阶段(UI 渲染或下一个宏任务选取)时,才批量收集并加入宏任务队列。
事件触发时机取决于浏览器的事件调度机制
- resize 和 scroll 是连续高频事件,浏览器通常会做合并或节流处理,并非每次像素变化都立刻触发;
- 它们的派发发生在“宏任务执行前”或“渲染后”的某个检查点,而不是在微任务执行中;
- 规范上,这些事件属于 DOM 事件,归类为宏任务,必须排队等待主线程空闲(即调用栈为空 + 微任务队列为空)才能执行。
实际验证:代码中看不到“中间态”触发
例如:
console.log('1');
Promise.resolve().then(() => console.log('2'));
window.addEventListener('resize', () => console.log('resize!'));
// 手动触发 resize(如缩放窗口)
console.log('3');
输出一定是 1 → 3 → 2 → resize!(假设 resize 在微任务之后才被浏览器捕获并入队)。你无法在 2 执行过程中看到 resize!,因为事件回调还没进队列,更不会插队执行。
注意:scroll 事件还有额外限制
scroll 事件默认不冒泡,且很多浏览器会对它做优化(比如只在帧结束前触发一次),它甚至可能被延迟到渲染阶段之后才派发。因此它比 resize 更不容易在微任务期间出现,也进一步说明:微任务清空是事件分发的前提条件,不是触发条件。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











