我有以下代码,其中我向文档添加了事件侦听器,然后将其删除。
document.addEventListener("keypress", gameStart);
function gameStart() {
document.querySelector("h1").innerHTML = "Level 1";
document.querySelector("h2").style.visibility = "hidden";
document.removeEventListener("keypress", gameStart);
}
我无法理解如何在gameStart()定义内的removeEventListener方法中回调gameStart。这对我来说似乎是循环的,但我感觉我在这里误解了一些基本的东西。我错过了什么?
gameStart
是对该函数的引用,通过引用,在JS中可以传递函数。对于命名函数,函数本身的引用会自动传递给它们,并且如果将匿名函数分配给变量,则可以从外部作用域获取该引用。这个引用实际上是一个值,在JS中,循环引用不是一个问题,你可以轻松地执行例如const arr = []; arr[0] = arr;
。请参考https://dev59.com/cHI_5IYBdhLWcg3wK_3E。 - Teemuoptions
给addEventListener,其中你可以指定监听器只会被调用一次。document.addEventListener("keypress", gameStart, {once: true});
。文档:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener - ItsFlo