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.
添加回答
舉報