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

cal*_*lum 5 javascript debouncing lodash

LoDash的防抖动接受一个选项maxWait.

来自文档:

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

我很困惑,是不是和使用油门一样?有什么不同?

ras*_*sen 7

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

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


Cla*_*ies 6

它们是相似的概念,但有很大的不同。

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

throttle-两次通话之间等待的时间。

throttle当您多次调用一个函数且不希望它被频繁调用时使用。 maxWait用于延迟单个事件的执行。

编辑在这里添加更多细节:

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

_debounce创建一个函数,该函数:

创建一个函数,该函数将延迟func的执行,直到上次调用它以来经过了等待的毫秒数。

而_throttle创建一个函数,该函数:

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

_debounce实际上允许后续呼叫发生,但会延迟其处理,而_throttle实际上在等待期间不允许呼叫。

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

leadingtrailing选项不会引起功能的附加运行; 相反,它们控制何时执行功能。

使用将leading导致函数执行,并且后续的调用将被反跳。

使用trailing会使函数在反跳结束时执行,该时间可能小于超时时间。本质上,您允许后续的呼叫在最后一个去抖动时间结束后立即发生,而不是强迫他们在中间开始时等待整个超时。

注意:如果前导选项和尾随选项为true,则仅当在等待超时期间多次执行了去抖动功能时,才会在超时的后沿调用func。

因此,从理论上讲,如果您使用了所有三个选项(leadingmaxWaittrailing),则maxWait不会发生,因为您将永远不会超过等待时间,并且trailing只有在相同的等待时间中两次调用函数时才会发生。

  • 鉴于节流阀实际上是根据 maxWait 的去抖来定义的(https://github.com/lodash/lodash/blob/4.17.11/lodash.js#L10898),我们可以不接受或编辑这个答案吗?调用“之前”和“之间”之间的区别是毫无意义的。油门只是在最长等待时间内进行反跳。 (2认同)