第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

這兩種在 addEventListener 中使用回調(diào)的方式有什么區(qū)別?

這兩種在 addEventListener 中使用回調(diào)的方式有什么區(qū)別?

慕哥6287543 2023-03-10 13:50:48
我發(fā)現(xiàn)了 2 種使用回調(diào)函數(shù)的方法,addEventListener但對(duì)每種方法的作用感到困惑。在第一個(gè)選項(xiàng)中,為什么我們不使用括號(hào)?在第二個(gè)選項(xiàng)中我們使用它;有什么不同??jī)烧遚artLogic都是clearCart同一類的一部分。我確實(shí)通過了 MDN,但找不到明確的答案。請(qǐng)?jiān)敿?xì)說明。選項(xiàng)1:cartLogic() {  clearCartBtn.addEventListener('click', this.clearCart);}選項(xiàng) 2:cartLogic() {  clearCartBtn.addEventListener('click', () => {    this.clearCart();  })}
查看完整描述

5 回答

?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊

addEventListener 需要一個(gè)函數(shù)作為事件處理程序的第二個(gè)參數(shù)(回調(diào))。


第一個(gè)場(chǎng)景你傳遞給它一個(gè)命名函數(shù)引用。這就像代表函數(shù)對(duì)象的變量


如果你這樣做:


addEventListener('click', myFunc()) // with ()

然后該函數(shù)將立即被調(diào)用,并且需要返回另一個(gè)函數(shù),該函數(shù)將在事件發(fā)生時(shí)被調(diào)用。


在第二種情況下,回調(diào)函數(shù)是一個(gè)匿名函數(shù),它將在事件發(fā)生時(shí)被調(diào)用。當(dāng)它被調(diào)用時(shí),它調(diào)用內(nèi)部函數(shù)


不同之處在于第一種情況,您的命名函數(shù)將事件對(duì)象作為第一個(gè)參數(shù),而上下文this將是元素。


第二種情況的上下文this是你的類,而不是元素,如果你想訪問事件對(duì)象,你需要自己傳遞它


簡(jiǎn)單例子


document.getElementById('1').addEventListener('click', myFunc)

document.getElementById('2').addEventListener('click', (evt)=> myFunc(evt))

document.getElementById('3').addEventListener('click', ()=> myFunc())


function myFunc(event){

   console.clear()

  if(event){

    console.log('Type of event:', event.type);        

  }else{

    console.log('No event object')

  }

  

  if(this instanceof HTMLElement){

     console.log('"this" is element:', this.tagName)

  }else{

     console.log('"this" is your class')

  }


}

<button id="1">Named function</button>

<button id="2">Anonymous with evt</button>

<button id="3">Anonymous no evt</button>


查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

選項(xiàng)一


cartLogic() {

    clearCartBtn.addEventListener('click', this.clearCart);

}

這里的第二個(gè)參數(shù)是傳遞給 的事件處理程序,它addEventListener沒有括號(hào),因?yàn)槟鳛閰?shù)傳遞的函數(shù)已經(jīng)存在于該cartLogic函數(shù)所附加的對(duì)象上。因此,當(dāng)您使用時(shí),this.clearCart您指的cartLogic是函數(shù)附加到的對(duì)象以及另一個(gè)名為clearCart.


方案二


cartLogic() {

    clearCartBtn.addEventListener('click', () => {

        this.clearCart();

    })

}

在這里,您傳遞了一個(gè)帶有箭頭函數(shù)表達(dá)式的匿名函數(shù)定義。


根據(jù)定義,addEventListener期望作為參數(shù)


type:一個(gè)區(qū)分大小寫的字符串,表示要偵聽的事件類型。


listener指定類型的事件發(fā)生時(shí)接收通知的對(duì)象(實(shí)現(xiàn)Event接口的對(duì)象)。這必須是實(shí)現(xiàn) EventListener 接口的對(duì)象或 JavaScript 函數(shù)。有關(guān)回調(diào)本身的詳細(xì)信息,請(qǐng)參閱事件偵聽器回調(diào)。


您可以了解有關(guān)addEventListener 的所有參數(shù)的更多信息。



查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

為清楚起見,您的第二個(gè)示例應(yīng)重寫為:


cartLogic() {

  clearCartBtn.addEventListener('click', () => this.clearCart());

}

現(xiàn)在,如果您從示例中刪除除差異之外的所有內(nèi)容,將很容易理解它們的不同之處。


this.clearCart

() => this.clearCart()

第一個(gè)例子是函數(shù)this.clearCart.


第二個(gè)例子是一個(gè)函數(shù),它執(zhí)行函數(shù)this.clearCart.


第二個(gè)例子涉及不必要的間接。這是唯一的區(qū)別。您不是直接傳遞this.clearCart(如第一個(gè)示例),而是傳遞一個(gè)唯一目的是執(zhí)行的不同函數(shù)this.clearCart。


查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

選項(xiàng)1. -> 這里我們不能使用括號(hào),因?yàn)樗腔卣{(diào)函數(shù)的引用,如果你在這里添加括號(hào),該函數(shù)將立即被調(diào)用。


cartLogic() {

clearCartBtn.addEventListener('click', this.clearCart);

}

選項(xiàng) 2.-> 在這里你定義了一個(gè)匿名函數(shù),所以它將作為回調(diào)函數(shù)工作,并且在這個(gè)函數(shù)中將this.clearCart();被調(diào)用。


  cartLogic() {

    clearCartBtn.addEventListener('click', () => {

        this.clearCart();

       })

   }


查看完整回答
反對(duì) 回復(fù) 2023-03-10
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

因此,為了簡(jiǎn)化您的問題,您想知道使用帶括號(hào)和不帶括號(hào)的函數(shù)有什么區(qū)別。


假設(shè)我們有一個(gè)logText()看起來像這樣的函數(shù)


function logText() {

  console.log("Hello world!")

}

然后我們像這樣在控制臺(tái)中運(yùn)行


logText()

我們收到這個(gè)發(fā)回


"Hello world!"

現(xiàn)在當(dāng)我們?cè)诳刂婆_(tái)中執(zhí)行此操作時(shí)


logText

我們?nèi)』貙?duì)函數(shù)的引用,如下所示


? logText() {

  console.log("Hello world!")

}

? → 功能


這有什么區(qū)別

cartLogic() {

    clearCartBtn.addEventListener('click', this.clearCart);

}

cartLogic() {

    clearCartBtn.addEventListener('click', () => { 

        this.clearCart() 

    });

}

它們之間最大的區(qū)別是第一個(gè)例子clearCart()被立即調(diào)用,而第二個(gè)例子被包裹在一個(gè)匿名函數(shù)中并且clearCart()沒有被立即調(diào)用。


這會(huì)改變事情的運(yùn)作方式嗎?

好吧,不是真的,一切仍然會(huì)以相同的方式工作,但為什么你不必在末尾添加 paratheneseclearCart因?yàn)檫@是引用函數(shù)所以我們可以想到:


cartLogic() {

    clearCartBtn.addEventListener('click', this.clearCart);

}

作為


cartLogic() {

    clearCartBtn.addEventListener('click', () => {

        // All code for your function 

        ...

    });

}

但這對(duì)我們?cè)诤瘮?shù)(在本例中addEventListener())將一些值發(fā)送回回調(diào)時(shí)的編碼方式產(chǎn)生了影響,在這種情況下,很可能是事件 (e) 被發(fā)送回回調(diào)。


假設(shè)您clearCart()有一個(gè)名為“e”或“event”的參數(shù),如果我們使用您的第一個(gè)示例,我們不必自行處理e/event或解析事件,它將為我們解析,但是對(duì)于您的借調(diào)示例,您將不得不做這樣的事情:


cartLogic() {

    clearCartBtn.addEventListener('click', e => { 

        this.clearCart(e) 

    });

}

為什么第二個(gè)例子沒有括號(hào)就不能工作?

因?yàn)榫拖裎以诨卮鸬那懊嫠f的那樣,不帶括號(hào)的函數(shù)是對(duì)函數(shù)的引用,而帶括號(hào)的函數(shù)將運(yùn)行。


當(dāng)我們不想調(diào)用函數(shù)而是想傳遞函數(shù)的引用時(shí),我們使用不帶括號(hào)的函數(shù)。


例如:


logText.length

這是解析函數(shù)對(duì)length方法的引用。


length用在函數(shù)上將返回函數(shù)期望的參數(shù)數(shù)量。


這已經(jīng)很長(zhǎng)了,所以我現(xiàn)在就在這里結(jié)束如果有什么我沒有說或沒有說好的發(fā)表評(píng)論,我會(huì)添加它:)


還看到了對(duì)其他人關(guān)于上下文的回答的評(píng)論this,我認(rèn)為這與此無關(guān),更多的是關(guān)于你如何聲明函數(shù)() => {}或function () {}.


查看完整回答
反對(duì) 回復(fù) 2023-03-10
  • 5 回答
  • 0 關(guān)注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)