2

JavaScript 中的事件处理程序是作为 FIFO、LIFO 还是并行触发的一个事件?

4

3 回答 3

4

这很简单。DOM 级别 2 事件模块未指定触发事件侦听器的顺序。但是,DOM Level 3 Events 模块确实指定顺序 与注册顺序相同

第一次注册——第一次被解雇。

请注意,DOM Level 3 Events 模块仍然是一个草案,而 Level 2 是一个建议。然而,现代浏览器通常完全遵循这个 3 级规范草案的语义,而不是旧的 2 级规范。

实际上,IIRC,只有IE 不尊重事件监听器的顺序。所有其他浏览器将其实现为 FIFO(并且如 DOM L3 事件中所述)。你也可以在网上找到相关的测试:)

于 2009-10-11T06:57:08.333 回答
3

由于 JavaScript 的单线程特性,事件和计时器会排队并按顺序执行,它们会在执行过程中有空缺时运行。

最好用图表来说明这一点:

事件和计时器

第一个块执行完成后,有两个异步事件在等待,鼠标点击回调定时器,浏览器在这个例子中选择鼠标点击,定时器将等待下一个可能的时间,以便执行。

查看John Resig撰写的关于计时器和事件的这篇非常好的文章。

于 2009-10-10T14:50:49.907 回答
0

PPK 有一篇关于事件冒泡和事件捕获的优秀文章。

http://www.quirksmode.org/js/events_order.html

于 2009-10-10T15:50:43.933 回答