事件监听器的匿名函数
为什么下面的匿名JS函数有“e”作为参数?我知道这是事件,但它是如何保存的?在这个事件监听器和它使用的处理器中,没有任何地方提到这个“e”。事件监听器的匿名函数
document.body.addEventListener("keyup", function(e) {
keys[e.keyCode] = false;
});
方法addAventListener
将函数作为其输入,然后在发生事件时使用事件对象调用此函数。
增加了一个简单的例子来说明这一点。
function EventCreator() {
var listeners = [];
var counter = 0;
setInterval(function() {
counter++;
listeners.forEach(function(listener) {
listener(counter);
});
}, 1000);
this.addListener = function(listener) {
listeners.push(listener);
};
}
var eventCreator = new EventCreator();
eventCreator.addListener(function(e) {
console.log("An event has occured: ", e);
});
文档:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
感谢兄弟,但只是一个问题,为什么在设置的时间间隔函数内的addlistener函数?每次运行时都不需要运行? –
添加侦听器函数只是将侦听器附加到列表。当一个事件发生时,你通过听众列表并且用新事件(在这个例子中是计数器)逐个调用它们。作为参数发送给addListener的函数不会立即调用,它将存储在列表中直到事件发生,然后调用它。 – knutesten
okaaaaaay非常感谢! –
'e'是一个参数是通过调用函数传递时,事件被触发。试着认为某处有一个地方有'body'元素中'keyup'事件的所有功能。每当这个事件触发时,这个函数就会像'callback(eventFired)'一样。 –
好,所以在这里工作时有一个类似于默认或通用库的东西,而名为“而不是”的函数是匿名的需要这个参数,我知道它是正确的吗? –
您的代码运行在浏览器上,负责处理该问题。在这种情况下,它不是像“它需要”那样的一个论点。这取决于你是否使用它。调用者将添加它想要的回调函数的任何参数(在本例中为'event'),所以你可以通过在你提供的函数中放置一个参数来使用它。 –