无法删除我附加的事件侦听器

can't remove an event listener I attached

我使用

在模块中附加了一个事件侦听器
document.addEventListener('keydown', () => this.clickCatcherFunction(target_id));

但是当那个函数被执行时,行

document.removeEventListener("keydown", () => this.clickCatcherFunction());

不会删除侦听器。下次按下某个键时,它会执行 clickCatcherFunction 并失败。我怎样才能将我用来创建它的相同功能传递给它以删除它?

其他失败的尝试:

document.removeEventListener("keydown", this.clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction());
document.removeEventListener("keydown", clickCatcherFunction);

只能删除命名函数,不能删除匿名函数,因为即使你创建一个相同的匿名函数,它也不会完全相同 instance 您之前添加的功能。您必须单独设置函数,如下所示:

function clickCather(evt){
  .  .  .
}

然后您可以使用 addEventListener("click", clickCatcher)removeEventListener("click", clickCatcher); 添加和删除它,因为您将在内存中引用相同的函数实例。

而且,请注意,对于 addEventListenerremoveEventListener,您不会调用您的函数(函数名称末尾没有括号),您只想引用它。