Javascript 事件侦听器&x27;s匿名函数

Javascript 事件侦听器&x27;s匿名函数,javascript,parameters,addeventlistener,Javascript,Parameters,Addeventlistener,为什么下面的匿名JS函数的参数是“e”?我知道这是一个事件,但它是如何保存的?除了在这个事件监听器和它使用的处理程序中,在任何地方都没有提到这个“e” document.body.addEventListener("keyup", function(e) { keys[e.keyCode] = false; }); 请记住,当keyup事件发生时,将调用该匿名函数。匿名函数说,“嘿,当你调用我时,一定要给我一个参数。”因此,当keyup事件发生时,浏览器将使用参数调用匿名函数,该参数将是事件对

为什么下面的匿名JS函数的参数是“e”?我知道这是一个事件,但它是如何保存的?除了在这个事件监听器和它使用的处理程序中,在任何地方都没有提到这个“e”

document.body.addEventListener("keyup", function(e) {
keys[e.keyCode] = false;
});

请记住,当
keyup
事件发生时,将调用该匿名函数。匿名函数说,“嘿,当你调用我时,一定要给我一个参数。”因此,当
keyup
事件发生时,浏览器将使用参数调用匿名函数,该参数将是事件对象。事件对象在事件发生时创建。

方法
addAventListener
将函数作为其输入,然后在事件发生时使用事件对象调用此函数

添加了一个简单的示例来说明这一点

函数EventCreator(){
var侦听器=[];
var计数器=0;
setInterval(函数(){
计数器++;
forEach(函数(侦听器){
监听器(计数器);
});
}, 1000);
this.addListener=函数(listener){
listeners.push(listener);
};
}
var eventCreator=new eventCreator();
eventCreator.addListener(函数(e){
log(“发生了一个事件:”,e);

});
e
是调用方函数在触发事件时传递的参数。试着想象一下,在某个地方,在
body
元素中有一个将所有函数附加到
keyup
事件的地方。每当触发此事件时,此函数都会执行类似于
回调(eventFired)
的操作。好的,这里有一个类似于默认库或通用库的功能,名为“而不是”的函数需要此参数,我没弄错吧?是你的代码运行的浏览器负责处理这个问题。在这种情况下,它不像“需要”一个论点。这取决于你是否使用它。调用者将向回调函数(在本例中为
事件
one)添加它想要的任何参数,因此您可以通过在您提供的函数中放置一个参数来使用它。命名参数的存在不会改变浏览器的行为。事件对象将始终传递给处理程序。感谢您的澄清。我知道这一点,但是我想把技术噪音排除在我的回答之外,以便专注于作者提出的问题。谢谢你们两位,这让我非常清楚,所以这意味着它不必是“e”,我可以使用我喜欢的任何占位符,对吗?@poolmatho-这是函数参数的变量名,就像其他函数一样。谢谢你,伙计,但我想问一个问题,为什么addlistener函数不在set interval函数中?它不需要每次运行时都运行吗?addlistener函数只是将一个侦听器附加到列表中。当一个事件发生时,您将遍历侦听器列表,并使用新事件(在本例中为计数器)逐个调用它们。作为参数发送到addListener的函数不会立即被调用,它存储在列表中,直到事件发生,然后被调用。