4 回答
TA贡献2012条经验 获得超12个赞
在removeEventListener
文档中我们可以看到:
target.removeEventListener(type, listener[, options]); target.removeEventListener(type, listener[, useCapture]);...
listener要从事件目标中删除的事件处理程序
的EventListener
调用时不会调用该EventListener
函数(在您的情况下gameStart
removeEventListener
) ,因此没有任何循环调用或递归,它被传递给removeEventListener
该函数,因此可以从该事件中注销该函数。
TA贡献1900条经验 获得超5个赞
每个人的答案都很复杂。简单一点:
1-您没有gameStart
重新调用该函数document.removeEventListener("keypress", gameStart);
您实际上是在调用该removeEventListener()
函数-现在再读一遍,因为我知道这可能会令人困惑。
2-您正在告诉该removeEventListener()
功能从您的功能中删除您的按键监听gameStart()
器。gameStart 从未在那条线的最后调用自己。
3-现实生活中的例子(计算之外):
有人打电话给你的电话# xxx-xxx-xxxx 然后你接电话,那个人告诉你做某事(你是 gameStart()) 完成后你想挂断电话,因为你没有其他事情可做或讨论电话里的另一个人,所以你告诉另一个人挂断你的电话,因为否则他们会一直在听电话(另一个人是事件监听器)。你没有挂断电话,你甚至没有参与挂断电话的行动,你只是告诉他们他们需要做什么。
我希望这会有所帮助!
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.
添加回答
举报