Javascript 在addEventListener中使用带闭包的自执行函数作为侦听器
我使用以下代码在DOM元素上添加事件侦听器:Javascript 在addEventListener中使用带闭包的自执行函数作为侦听器,javascript,closures,Javascript,Closures,我使用以下代码在DOM元素上添加事件侦听器: var me = this; element.addEventListener('click', function(element) { return function(evt) { me.handler(evt, element); }; } (element) , false); 当我单击元素时,将调用处理程序,并将事件和元素作为参数 我已经通读了有关闭包的信息,但我仍然不清楚事件对象如何与evt变量关联。
var me = this;
element.addEventListener('click', function(element) {
return function(evt) {
me.handler(evt, element);
};
} (element) , false);
当我单击元素时,将调用处理程序,并将事件和元素作为参数
我已经通读了有关闭包的信息,但我仍然不清楚事件对象如何与evt变量关联。为什么不使用
var me = this;
element.addEventListener('click', function(evt) {
me.handler(evt, element);
} , false);
我仍然不清楚事件对象如何与evt关联
变数
如果使用addEventListener
,则在触发事件时,事件侦听器将接收一个作为事件的参数
然后,当您添加事件侦听器时,下面的代码
function(element) {
return function(evt) {
me.handler(evt, element);
};
} (element)
计算并返回以下函数
function(evt) {
me.handler(evt, element);
}
这是事件处理程序。然后,它的第一个参数
evt
是事件。可能元素
不是一个常量变量,例如在循环中。@Bergi那么,与其每次迭代都添加一个事件处理程序,不如添加一个执行循环的事件处理程序。感谢您的解释。我最终使用了this.handler.bind(this,element)
代码很有可能简化为element.addEventListener('click',this.handler,false)代码>evt
将作为唯一的参数自然地传递给处理程序。在处理程序内部,此
将引用已单击的元素,因此无需传递它。关于问题中的代码,您在“闭包”文献中找不到任何解释evt
。只有元素
被困在闭包中evt
是返回函数的唯一参数,它将成为click处理程序,就像您直接附加了内部函数,而没有外部(闭包形成)函数一样。