[英]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.