为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2022-07-08 17:01:34
我有以下代码,在其中向文档添加了一个事件侦听器,然后将其删除。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 进行回调。这对我来说似乎是循环的,但我觉得我在这里误解了一些基本的东西。我错过了什么?
查看完整描述

4 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

removeEventListener文档中我们可以看到:

target.removeEventListener(type, listener[, options]);
target.removeEventListener(type, listener[, useCapture]);

...

listener要从事件目标中删除的事件处理程序
   的EventListener

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


查看完整回答
反对 回复 2022-07-08
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

每个人的答案都很复杂。简单一点:

1-您没有gameStart重新调用该函数document.removeEventListener("keypress", gameStart);您实际上是在调用该removeEventListener()函数-现在再读一遍,因为我知道这可能会令人困惑。

2-您正在告诉该removeEventListener()功能从您的功能中删除您的按键监听gameStart()器。gameStart 从未在那条线的最后调用自己。

3-现实生活中的例子(计算之外):

有人打电话给你的电话# xxx-xxx-xxxx 然后你接电话,那个人告诉你做某事(你是 gameStart()) 完成后你想挂断电话,因为你没有其他事情可做或讨论电话里的另一个人,所以你告诉另一个人挂断你的电话,因为否则他们会一直在听电话(另一个人是事件监听器)。你没有挂断电话,你甚至没有参与挂断电话的行动,你只是告诉他们他们需要做什么。

我希望这会有所帮助!


查看完整回答
反对 回复 2022-07-08
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您始终可以传递您定义的函数的引用,因为


函数不必在定义时拥有所有可用的东西,而是在调用时要求。


它也是递归的基础。例如


function getFactorial(num) {

    if (num <= 2) {

        return num;

    }

    return num * getFactorial(num - 1);

}

也许,以下内容将帮助您了解更多:


function getType() {

    return typeof getType;

}

上述函数将始终返回"function"。


另一个怎么样:


function getTypeOfX() {

    return typeof myObj.x;

}

您将能够定义此函数,但一旦您使用 调用它getTypeOfX(),您将收到错误,因为myObj未在函数定义的外部/全局范围内定义。


如果您在控制台中尝试这样做。你可以做


var myObj = {

    x: ""

}

即使在函数定义之后,getTypeOfX()再次调用以查看它现在打印"string".


这里的结论就是上面@Quentin提到的:


Variables used inside a function are not evaluated until the function is called.


查看完整回答
反对 回复 2022-07-08
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

在调用函数之前,不会计算函数内部使用的变量。

gameStart因此,可以引用自身,因为它是在调用之前创建的。


查看完整回答
反对 回复 2022-07-08
  • 4 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信