Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果附加的函数是闭包,如何删除事件侦听器?_Javascript_Closures - Fatal编程技术网

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