【发布时间】:2015-01-08 15:21:03
【问题描述】:
现在我对浏览器事件有点困惑。我仍然不确定事件循环是如何开始工作的。例如,当我在某个函数的中间分派自定义事件时,事件处理是立即开始还是移动到事件队列中? 那么其他事件呢?如果我单击或加载页面,会发生什么?事件处理过程什么时候开始?
【问题讨论】:
标签: javascript browser event-handling event-queue
现在我对浏览器事件有点困惑。我仍然不确定事件循环是如何开始工作的。例如,当我在某个函数的中间分派自定义事件时,事件处理是立即开始还是移动到事件队列中? 那么其他事件呢?如果我单击或加载页面,会发生什么?事件处理过程什么时候开始?
【问题讨论】:
标签: javascript browser event-handling event-queue
我仍然不确定事件循环是如何开始工作的。
通常在浏览器中,它会在您进入页面后立即开始工作,并在您退出页面时停止工作。
例如,当我在某个函数的中间派发自定义事件时,事件处理是立即开始还是移动到事件队列中?
有同步事件(立即触发)和异步事件在下一次迭代中触发。您的代码通常会在任何东西运行之前运行到其执行结束,否则除非您明确终止它。
DOM 自定义事件通常是同步的。也就是说 - 你是触发它们的人,它会立即发生。
例如,如果您正在运行代码并且发生了 "click" 事件或触发了使用 setTimeout 设置的计时器,您的代码将首先完成运行 - 没有任何东西“中断”您的代码。
事件处理过程什么时候开始?
事件可以同步或异步发送。
必须将同步事件(同步事件)视为它们在先进先出模型中的虚拟队列中,按相对于其他事件的时间发生顺序排序,以更改 DOM ,并与用户交互。此虚拟队列中的每个事件都必须延迟,直到前一个事件完成其传播行为或被取消。某些同步事件由特定设备或进程驱动,例如鼠标按钮事件。这些事件由为该组事件定义的事件顺序算法控制,并且用户代理必须按定义的顺序调度这些事件。
【讨论】: