Javascript 如果附加的函数是闭包,如何删除事件侦听器?
例如:Javascript 如果附加的函数是闭包,如何删除事件侦听器?,javascript,closures,Javascript,Closures,例如: for (var i = 0 ; i < a.length ; i ++) { a[i].addEventListener("touchend", f(i)); } function f(param) { return function() { for (var i = 0 ; i < a.length ; i ++) { a[i].removeEventListener("touchend", f(i));
for (var i = 0 ; i < a.length ; i ++) {
a[i].addEventListener("touchend", f(i));
}
function f(param) {
return function() {
for (var i = 0 ; i < a.length ; i ++) {
a[i].removeEventListener("touchend", f(i));
}
}
}
for(变量i=0;i
它就是不起作用,我该怎么办?为了调用
。removeEventListener()
您必须保留对该函数的引用。这意味着您必须为函数提供一个标识符,然后可以在.addEventListener()
和中使用该标识符。符号可以是本地符号(不必是全局符号),但您需要一个符号才能在两个位置使用它
如果您能解释一下您试图用显示的代码实现什么,以及您想在哪里使用.removeEventListener()
,我们可能会提供一个更具体的建议,说明如何更改它(我不明白您试图用它做什么)
也许是这样的:
var temp;
for (var i = 0 ; i < a.length ; i ++) {
temp = f(i);
a[i].touchEndHandler = temp;
a[i].addEventListener("touchend", temp);
}
或者,根据.removeEventListener()
代码所在的位置,您可能能够将函数引用保存在闭包变量中。您想做什么?保留一个引用:a[i]。addEventListener(“touchend”,a[i]。handler=f(i))代码>和a[i].removeEventListener(“touchend”,a[i].handler)代码>
x.removeEventListener("touchend", x.touchEndHandler);