事件循环
结论先行(一句话版)
浏览器是: 👉 执行 一个 macrotask 👉 然后 清空 microtasks 👉 然后 “可能” 进行一次渲染 👉 再进入下一轮循环
注意两个关键限定词:
- 是 一个 macrotask
- 渲染是 可能,不是必然
一、标准事件循环的一次“完整迭代”
你可以在脑中记成这段伪代码:
while (true) {
task = getNextMacrotask();
execute(task);
while (microtaskQueue.notEmpty()) {
execute(microtask);
}
if (shouldRender()) {
render();
}
}
你刚才问的那句话,翻译成底层就是:
“是不是一个 macrotask → 清空 microtask → 再 render?”
👉 是的,顺序就是这样