亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號