将参数传递给回调函数的正确方法是什么?

时间:2020-09-07 05:36:37

标签: javascript jquery

这是一个可行的例子。如您所见,我正在使用从setElemHeight返回的值调用getElemHeight函数。但 我认为传递值而不是函数是一种不好的做法。

选项1)我可以将其包装在这样的匿名函数中:

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

选项2)我可以在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)
})

1 个答案:

答案 0 :(得分:1)

除非将元素的高度随时间变化,否则将值传递给函数就很好。

如果它发生变化,您将需要在每次事件处理程序调用时重新计算高度。如果没有,则可以直接传入该值,因为无论如何它总是会使用相同的值。

此行:

 let elemHeight = callback

如果callback是一个函数,则实际上并不调用回调,它只是将函数分配给新变量。
如果您希望elemHeight获得返回值,则需要这样做:

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

如果是值,则可能要更改名称。

关于开放式封闭原则,我认为在JS中,作为一种动态的弱类型语言,这可能主要适用于模块,而不是特定的代码段。有一些技巧可用于在JS中创建封装并仅允许在某些地方进行扩展,但是通常您可以在任何地方插入任何想要的东西,因此我不必担心。