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

问题描述 投票:1回答:3

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

javascript events internals
3个回答
4
投票

这很简单。 DOM Level 2 Events模块does not specify order,其中将触发事件侦听器。但是,DOM Level 3 Events模块does specify order与注册一个相同。

首次注册 - 首先解雇。

请注意,DOM Level 3 Events模块仍然是草稿,而Level 2 one是推荐。尽管如此,现代浏览器通常遵循这个3级规范草案的语义,而不是旧的2级规范。

在实践中,IIRC,只有IE不尊重事件听众的顺序。所有其他浏览器将其实现为FIFO(并且如DOM L3事件中所述)。你也可以找到related tests online :)


3
投票

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

用图表最好地证明了这一点:

Events and Timers

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

查看John Resig关于Timers and Events的这篇非常好的文章。


0
投票

PPK在事件冒泡和事件捕获方面有很好的写作。

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

© www.soinside.com 2019 - 2024. All rights reserved.