簡體   English   中英

將參數傳遞給回調函數的正確方法是什么?

[英]What is the right way to pass parameters into callback functions?

這是一個工作示例。 正如你可以看到我打電話setElemHeight函數從返回的值getElemHeight 但我認為傳遞值而不是函數是一種不好的做法。

選項 1)我可以將它包裝在匿名函數中,如下所示:

function () { getElemHeight('.map-svg') }

選項 2)我可以在setElemHeight函數中調用它並在setElemHeight傳遞參數,但我認為它會破壞開放封閉原則。

我的問題是:將參數傳遞給回調函數的正確方法是什么?

謝謝。

function(elem) {
  return $(elem).height()
}

function setElemHeight(elem, callback, offset) {
  let elemHeight = callback
  $(elem).height(elemHeight - offset)
}
$(window).on('load resize', function() {
  setElemHeight('#dealersTabContent', getElemHeight('.map-svg'), 190)
})

將值傳遞給函數就可以了,除非元素的高度隨時間發生變化。

如果它發生變化,您將需要在每次調用事件處理程序時重新計算高度。 如果沒有,您可以只傳入該值,因為無論如何它將始終使用相同的值。

此外,這一行:

 let elemHeight = callback

如果callback是一個函數,這實際上不會調用回調,它只是將函數分配給一個新變量。
如果您希望elemHeight獲得返回值,則需要這樣做:

 let elemHeight = callback() // <== Notice the parenthesis

如果它是一個值,您可能想要更改名稱。

至於開放封閉原則,我認為在 JS 中,作為一種動態的弱類型語言,這可能主要適用於模塊而不是特定的代碼片段。 在 JS 中創建封裝和只允許在某些地方擴展有一些技巧,但通常你可以在任何地方插入任何你想要的東西,所以我不擔心它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM