javascript-事件处理程序的关闭-必须“返回”
作者:互联网
我可以通过以下两种方式在javascript中实现事件处理程序,我想知道这两种样式之间是否有区别,或者在两种情况下click_handler是闭包并且没有区别.我很困惑,因为我在某处读到闭包才形成,然后将“ return”与匿名函数一起使用
function foo() {
var a = 5;
function click_handler() {
a++;
}
someElement.addEventHandler('click', click_handler, false);
}
要么
function foo() {
var a = 5;
return function() {
a++;
}
}
click_handler = foo()
someElement.addEventListener('click', click_handler, false);
解决方法:
创建两个函数时将形成闭包.它们在功能上应与“闭合形成”相同.您不需要返回就可以形成闭包.
然而…
在#1中,当您调用foo()时,您将向onClick添加事件侦听器.如果您一次又一次地调用它,它将继续附加到onClick事件上.
在#2中,当您调用foo()时,您只是在“重新关闭”该函数.如果您一遍又一遍地调用它,它将不会重新附加到onClick事件上.
并且,在#1中,如果从那时起someElement的引用已经更新,则在再次调用foo()时,它将使用新的someElement的引用…
假设您只想附加一次onClick函数,而不必再重新附加它,我将像这样编写代码…
(function() {
var a = 0;
someElement.addEventListener("click", function() {
a++;
}, false);
})();
该自执行功能将消除将“ foo”添加到全局中的需要,因为您只使用了一次.
标签:closures,javascript 来源: https://codeday.me/bug/20191208/2093470.html