gpt4 book ai didi

javascript - 事件处理程序的闭包 - 必须是 "return"

转载 作者:行者123 更新时间:2023-11-29 10:53:36 25 4
gpt4 key购买 nike

我可以通过下面提到的两种方式在 javascript 中实现事件处理程序,我想知道这两种样式之间是否有任何区别,或者在这两种情况下 click_handler 都是闭包并且没有区别。我很困惑,因为我在某处读到只有在“返回”与匿名函数一起使用时才形成闭包

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);

最佳答案

当创建 2 个函数时,就形成了闭包。它们在功能上应该在“闭合形成”方面工作相同。您不需要返回即可形成闭包。

然而...

在 #1 中,当您调用 foo() 时,您将向 onClick 添加一个事件监听器。如果您一次又一次地调用它,它将继续附加到 onClick 事件...

在 #2 中,当您调用 foo() 时,您只是简单地“重新关闭”该函数。如果您一遍又一遍地调用它,它不会将自己重新附加到 onClick 事件...

而且,在#1 中,如果 someElement 的引用已经更新,当再次调用 foo() 时,它将使用新的 someElement 的引用...

假设您只想附加一次 onClick 函数,并且您不必再重新附加它,我将这样编写代码......

(function() {
var a = 0;
someElement.addEventListener("click", function() {
a++;
}, false);
})();

这个自执行函数将消除向全局添加“foo”的需要,因为您只使用它一次。

关于javascript - 事件处理程序的闭包 - 必须是 "return",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com