我有一些通过DOM (createEvent、initEvent、dispatchEvent等)触发/模拟DOM事件的代码。对于大多数DOM事件(如单击),有一个浏览器默认操作,如链接后面。
由于JavaScript代码执行是单线程的,所以当我的代码在批处理中触发多个事件时,我不确定执行流是如何的。所以让我们假设我这样做(伪代码):
for (var i = 0; i < 10; i++) {
var event = document.body.createEvent('MouseEvent');
event.initMouseEvent(...);
document.body.dispatchEvent(event);
}会发生什么呢?我的循环是否首先完全执行,然后所有事件都被处理,导致默认浏览器操作触发并注册事件侦听器执行?或者每次调用dispatchEvent以触发默认操作(和事件侦听器)时,代码执行是否中断?
谢谢
发布于 2013-11-27 12:59:36
由于JS不是多线程的,所以每次分派事件时,它都会立即触发--实现不会创建一些事件队列,以便在下一个周期启动。
这是旧突变事件被废弃的原因之一。例如,如果将400个元素添加到节点中,它将触发400个变异事件(这会传播),从而减缓几乎所有的事情。
因此,在代码片段中,循环的每一次迭代都将创建鼠标事件,分派鼠标事件,处理鼠标事件的所有侦听器,然后继续执行循环的下一次迭代。
https://stackoverflow.com/questions/20243009
复制相似问题