作者所说的“事件处理函数在触发后想要解除绑定”是什么意思

Tho*_*hor 2 javascript function event-handling dom-events

我目前正在通过“你不知道 js”系列丛书学习 JavaScript

在本书的作用域和闭包部分,在讨论命名函数表达式时,作者提到了。

如果没有名称,如果函数需要引用自身,进行递归等,不幸的是需要使用已弃用的arguments.callee 引用。另一个需要自引用的例子是当事件处理函数在触发后想要解除绑定时。

因为我在 JavaScript 方面相对缺乏经验,所以我不太确定什么是“事件处理函数解除绑定”(我知道什么是“事件处理函数”)以及它是如何工作的。

所以我只是想知道是否有人可以解释一下;它实际上是做什么的?(代码示例会更好)。

Jam*_*iec 5

事件处理程序可以采用匿名函数,这很好用。

document.querySelector("button").addEventListener("click",function(){
    console.log("Clicked from anonymous func");
});
Run Code Online (Sandbox Code Playgroud)
<button>Click me</button>
Run Code Online (Sandbox Code Playgroud)

也可以删除事件处理程序 ( removeEventListener),并且程序员可能希望在引发事件后发生这种情况(通常,您可能只希望事件发生一次)。使用上面的代码会很困难,因为您无法引用充当事件侦听器的匿名函数。

更改命名函数使这更容易:

function myEventHandler(){
    console.log("Clicked from named func - but it'll only work once");
    // In an event handler "this" refers to the clicked element
    this.removeEventListener('click',myEventHandler)
}

document.querySelector("button").addEventListener("click",myEventHandler);
Run Code Online (Sandbox Code Playgroud)
<button>Click me</button>
Run Code Online (Sandbox Code Playgroud)