编程语言
首页 > 编程语言> > javascript-事件处理程序的关闭-必须“返回”

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