对LoDash的debounce方法的maxWait选项感到困惑

时间:2014-06-06 10:34:17

标签: javascript lodash debouncing

LoDash debounce接受maxWait选项。

来自文档:

  

[options.maxWait](数字):允许最长时间func在被调用之前被延迟。

我很困惑,是不是和使用throttle一样?有什么区别?

2 个答案:

答案 0 :(得分:5)

它们是一个类似的概念,但却截然不同。

maxWait - 调用函数之前等待的时间。

throttle - 在电话之间等待的时间。

当你多次调用一个函数并且不希望它被频繁调用时,会使用

throttle。当您延迟执行单个事件时,将使用maxWait

修改在此处添加更多详细信息:

_throttle和_debounce之间的区别有点微妙。

_debounce创建一个函数:

  

创建一个函数,该函数将延迟func的执行,直到自上次调用之后经过等待毫秒为止。

而_throttle创建一个函数:

  

创建一个函数,在执行时,每隔等待毫秒最多只调用一次func函数。

_debounce实际上允许后续调用发生,但延迟了他们的处理,而_throttle在等待期间实际上不允许调用。

你可以多次去抖动一个函数,理论上无限期地延迟它。 maxWait可用于确保函数最终被调用。

leadingtrailing选项不会导致其他功能运行;相反,它们控制函数何时执行。

使用leading会导致函数执行,后续调用将被去抖。

使用trailing会导致函数在去抖动结束时执行,这可能小于超时。基本上,您允许后续调用在最后一次去抖时间结束后立即发生,而不是强迫它们等待整个超时时间,如果它们在中间开始。

  

注意:如果前导和尾随选项为true,则只有在等待超时期间多次调用去抖函数时,才会在超时的后沿调用func。

所以,理论上如果你使用了所有3个选项(leadingmaxWaittrailing),那么maxWait就不会发生,因为你永远不会超过等待期间,trailing只有在同一等待期内调用该函数两次才会发生。

答案 1 :(得分:5)

如果你看一下源代码,你会发现油门实际上是一个薄的去抖动包装。限制使用maxWait属性调用debounce https://github.com/lodash/lodash/blob/master/lodash.js#L6427-L6444

因此,如果您使用maxWait调用debounce并将trailing和leading设置为true,则它将与调用throttle相同。