為什么嵌套在匿名函式中的函式會等待按鈕單擊(應該如此),但是當函式未嵌套時,它會在頁面加載時運行而不等待按鈕單擊?
作業示例:
btn1.onclick = function() {cityChoice(1)};
//code works only on button click as expected
不作業的例子:
btn1.onclick = cityChoice(1);
//function runs on pageload without waiting for button click?
歡迎任何指向檔案/文章的鏈接,因為我無法在 Google 或 StackOverflow 上找到它們來解釋這一點。
編碼語言:JavaScript(原版)
技能水平:初學者
編輯器:Visual Studio Code
作業系統:Windows 7
uj5u.com熱心網友回復:
btn1.onclick = cityChoice(1);不是嵌套函式。您只是呼叫了該cityChoice函式并將其回傳值保存為onclickvariable 的屬性btn1。
有幾種方法可以實作將偵聽器系結到事件的相同目的:
btn1.onclick = function() { }<-- 匿名函式
btn1.onclick = () => { }<-- 箭頭函式
綜上所述:
btn1.onclick = cityChoice(1)<-- cityChoice 函式被呼叫,其值被保存到 btn1.onclick
參考:
JS 中的匿名函式
JS中的箭頭函式
uj5u.com熱心網友回復:
cityChoice 是一個函式,我假設您正在嘗試將默認引數傳遞給它,您1看到的問題是您在第二個示例中呼叫cityChoice 并將結果分配cityChoice(1)給 onclick 而不是注冊事件處理程式。我假設這將回傳一個普通的 javascript 物件。onclick 需要是一個事件處理程式(任何函式匿名與否)
uj5u.com熱心網友回復:
當您在cityChoice(1);沒有嵌套函式的情況下使用 this 時。
Javascript 理解它就像你在沒有事件的情況下鍵入它onclick就像你在頁面加載時呼叫它一樣。
但是function當呼叫它時陳述句分配新函式 call cityChoice(1)。
uj5u.com熱心網友回復:
所有事件處理程式(如 onClick)都需要函式參考(第一個選項)而不是函式結果(第二個選項)。這是來自 MDN 的官方檔案,它很好地解釋了它。
當事件(例如,單擊)被觸發時,它會執行您傳遞給它的函式。因此,如果將 Function 的回傳值傳遞給 onClick 事件,它將無法執行,并且會出現錯誤。
我希望這能用簡單的術語解釋這個概念。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460467.html
標籤:javascript
下一篇:如何一次顯示4個div中的1個
