1

现在我对浏览器事件有点困惑。我仍然不确定事件循环是如何开始工作的。例如,当我在某个函数的中间分派自定义事件时,事件处理是立即开始还是移动到事件队列?那么其他事件呢?如果我单击或加载页面,会发生什么?事件处理过程什么时候开始?

4

1 回答 1

1

我仍然不确定事件循环是如何开始工作的。

通常在浏览器中,它会在您进入页面后立即开始工作,并在您退出页面时停止工作。

例如,当我在某个函数的中间分派自定义事件时,事件处理是立即开始还是移动到事件队列?

有同步事件(立即触发)和在下一次迭代中触发的异步事件。除非您明确终止它,否则您的代码通常会在运行其他任何内容之前运行到其执行结束。

DOM 自定义事件通常是同步的。那就是——你是触发它们的那个人,它马上就发生了。

例如,如果您正在运行代码并且发生"click"事件或触发了设置的计时器,setTimeout您的代码将首先完成运行 - 没有任何“中断”您的代码。

事件处理过程什么时候开始?

如指定

事件可以同步或异步发送。

同步事件(同步事件)必须被视为在先进先出模型中的虚拟队列中,按相对于其他事件的时间发生顺序排序,到 DOM 中的更改,以及用户交互。此虚拟队列中的每个事件都必须延迟,直到前一个事件完成其传播行为或被取消。某些同步事件由特定设备或进程驱动,例如鼠标按钮事件。这些事件由为该组事件定义的事件顺序算法控制,并且用户代理必须按定义的顺序调度这些事件。

于 2015-01-08T15:30:50.873 回答