"e" 参数是如何分配给事件的?

How is the "e" parameter assigned to the event?

我可以看到一些关于 e 参数的线索,但有一件事我不能完全理解,尽管我确信这是一个显而易见的答案。

e 参数传递到从 addEventListener() 调用的函数时,e 看起来被分配给事件对象。我想了解的是 where/how 是否已分配?

element.addEventListener('click', function (e){
  console.log(e);
}, false);

从事件调用函数时分配。您只是在定义一个回调,还没有调用它。

而不是这个:

element.addEventListener('click', function (e){
   console.log(e);
},false);

你可以这样写:

function DoOnClick(parameter) {
  console.log(parameter);
}

element.addEventListener('click', DoOnClick ,false);

在本例中,addEventLinster 的第二个参数是回调函数。回调函数是该事件发生时将调用的函数,它将以 new Event() 作为参数调用,Event parameter 将包含该事件生成的所有数据(X,Y 位置,它被触发的元素等)。

DoOnClick函数没有什么特别的,如果你这样调用DoOnClick("Hello"),那么控制台会打印Hello

如果您想了解更多 addEventListener 的实际工作原理,您可以查看 Mozilla documentation for this function.

它发生在内部,因为 the spec 是这样说的:

Call listener's callback's handleEvent, with the event passed to this algorithm as the first argument and event's currentTarget attribute value as callback this value.

所以回调函数接收一个参数。您可以将其命名为 eeventfoobar。你甚至可以不命名它,并使用 arguments[0].

访问它