removeEventListener - 函数定义本身内的回调?

UR9*_*82T 2 javascript function dom-events

我有以下代码,我向文档添加了一个事件侦听器,然后将其删除。

document.addEventListener("keypress", gameStart);

function gameStart() {
    document.querySelector("h1").innerHTML = "Level 1";
    document.querySelector("h2").style.visibility = "hidden";
    document.removeEventListener("keypress", gameStart);
}
Run Code Online (Sandbox Code Playgroud)

我无法理解如何在 gameStart() 本身定义内的 removeEventListener 方法中回调 gameStart。这对我来说似乎是循环的,但我觉得我在这里误解了一些基本的东西。我错过了什么?

Chr*_*ras 5

removeEventListener文档中我们可以看到:

target.removeEventListener(type, listener[, options]);
target.removeEventListener(type, listener[, useCapture]);
Run Code Online (Sandbox Code Playgroud)

...

监听
   的EventListener事件处理程序的函数从事件目标移除。

EventListener函数(在您的情况下gameStart)在调用时不会被调用removeEventListener,因此没有任何循环调用或递归,它被传递给removeEventListener以便可以从该事件中取消注册该函数。