Debounce function with args underscore

2019-03-17 11:46发布

问题:

I've got a function which takes in some arguments. But usage of underscore debounce is :

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

But in my case calculateLayout needs some arguments to run. How can I pass them in this case?

Update :

Sample calculateLayout function :

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

回答1:

You should be able to just use an anonymous function as the first argument, then call whatever you like in it:

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


回答2:

You don't need an anonymous function in the middle, arguments will automatically be passed to the original function when you run the debounced version.

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

As an advantage you don't have to hardcode-bind the arguments in advance

You can try it and if curious just check the source



回答3:

@Jamie's answer is better.

I'll keep my original answer as below, although the it should be better to use Jamie's answer if you are familiar with JS:

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);


回答4:

As soon as nobody written the one liner without extra var and function, I'll do it myself:

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

Debounce function returns another function, so you can call it just afterwards debounce is executed.