Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我可以在注册之前启动和处理事件?_Javascript_Events_Dom Events - Fatal编程技术网

Javascript 为什么我可以在注册之前启动和处理事件?

Javascript 为什么我可以在注册之前启动和处理事件?,javascript,events,dom-events,Javascript,Events,Dom Events,这种混乱的代码可以工作: let event = new CustomEvent("customEvent", { detail: { book: "FullStack Vue " } }); window.dispatchEvent(event); window.addEventListener("customEvent", e => console.log("This book is " + e.detail.book) ); 让我困惑的是:在我启动事件时,我还没有注

这种混乱的代码可以工作:

let event = new CustomEvent("customEvent", {
    detail: { book: "FullStack Vue " }
});

window.dispatchEvent(event);

window.addEventListener("customEvent", e =>
  console.log("This book is " + e.detail.book)
);
让我困惑的是:在我启动事件时,我还没有注册为侦听器,对吗?这件事应该进入虚空的某个地方。或者这是某种“竞赛条件”?在事件真正触发之前完成事件注册


或者,为什么我不应该在实际启动事件之前“倾听”事件?我试图理解这个简单的例子。

DOM事件会在下一个时间点发生,比如调用
setTimeout(fn,0)
'如果您想更深入地了解,则“事件循环”是关键字。

当您调用
dispatchEvent
时,它被放入队列中,因此您将在处理队列之前注册您的侦听器。谢谢。如果这真的是一种模式,我需要挖掘它。