带有args下划线的反跳功能


71

我有一个带有一些参数的函数。但是下划线去抖动的用法是:

var lazyLayout = _.debounce(calculateLayout, 300);

但就我而言,calculateLayout需要运行一些参数。在这种情况下如何通过他们?

更新:

样例calculateLayout功能:

var calculateLayout = function(a,b) {
  console.log('a is ' + a + ' and b is ' + b);
}

由于我还不完全了解下划线,因此不能完全确定,但是如果calculateLayout是一个函数,则将该函数与args一起传递给匿名函数。还是您已经尝试过了?
13ruce1337 2014年

2
呃,debounce功能 不会传递给予的论点?只需致电lazyLayout('a', 'b')
Bergi 2014年

@Gandalf StormCrow,也许您不应该接受我的回答,因为它并不是真正的最优雅的解决方案,但是只要它被接受,我就无法删除它
mgherkins 18-4-24

Answers:


38

您应该能够只将匿名函数用作第一个参数,然后在其中调用任何您喜欢的函数:

_.debounce(function(){
    calculateLayout(20, 30);
}, 300);

1
这正是我在评论中的意思。如果可行,则完美。
13ruce1337 2014年

4
同样,此方法将多次调用内部函数,并且仅对每个调用应用去抖,而不是将其作为单个调用。这个网站解释了这一切
Giacomo1968 '18

1
就像@JakeGould提到的那样,这只会创建3个去抖动的函数,这些函数不会分配任何东西,也不会被调用。
穆罕默德·乌默

274

您无需在中间使用匿名函数,当运行去抖动版本时参数将自动传递给原始函数

  var debounceCalculate = _.debounce(calculateLayout, 300);
  debounceCalculate(a,b);

作为优点,您不必预先对参数进行硬编码绑定

您可以尝试一下,如果好奇的话,请检查


6

@Jamie的答案更好。

我将保留原始答案,如下所示,尽管如果您熟悉JS,最好使用Jamie的答案:

var calculateLayout = function(a,b) {
  console.log('a is ' + a + ' and b is ' + b);
}

var debounceCalculate = _.debounce(function(a, b){
    calculateLayout(a, b);
}, 300);

debounceCalculate(1, 2);

3
呃... var debounceCalculate = _.debounce(calculateLayout, 300);就足够了
布拉德·肯特

@BradKent谢谢!自Jaime已经回答以来,我将保持今天的状态。
欢峰

@jacobhobson真的不知道为什么要这么做。首先,我在Jaime回答之前先回答了。其次,我认为我的回答对那些不很快想到args可以被忽略的JS初学者很有帮助。
欢枫

1

由于没有人在没有额外的var和的情况下编写了一个衬板function,所以我自己动手做:

_.debounce(calculateLayout, 300)(a, b);

防反跳功能会返回另一个函数,因此您可以在执行防反跳后立即调用它。


8
无法

2
这不是错吗?我将其确切地设置为事件处理程序(例如onClick),并且它完全没有反弹。如果将其设置为事件处理程序,它将始终创建去抖动功能的新实例
Artur Tagisow 20-03-31
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.