【问题标题】:Javascript Debounce Callback Function with Dynamic Arguments带有动态参数的 Javascript 去抖动回调函数
【发布时间】:2021-04-30 23:04:53
【问题描述】:

所以对于一个特性,我必须使用 javascript debounce 函数,它看起来像这样:

$.debounce = function (func, wait, immediate) {
    var timeout;
    return function() {
      var context = this, args = arguments;
      var later = function() {
        timeout = null;
        if (!immediate) func.apply(context, args);
      };
      var callNow = immediate && !timeout;
      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
      if (callNow) {
        func.apply(context, args);
      }
    };
  };

我是回调函数的新手,刚刚意识到这个函数返回一个我可以调用的函数。但我不能直接调用它。但是,我想要动态参数,而不是每次都创建一个新的变量函数对象。

所以例如我想调用我的函数

function print_something(){
// prints something
}

我会这样做:

var print_debounce = $.debounce(print_something, 100);

And then I can use 

print_debounce();

但我想让 print_debounce 更有活力。

例如(不起作用)

var function_debounce = $.debounce(func, wait);

function_debounce(print_something, 100);

有没有这样的方法?

谢谢!

【问题讨论】:

  • var print_debounce(); 是什么?您可以使用任意数量的参数调用function_debounce
  • 对不起,它只是 print_debounce();
  • 我无法使用我选择的参数调用 function_debounce。是否有不同的方法来实现我的 function_debounce,以便它可以使用任意数量/值的参数?
  • 你可以拨打print_debounce(100)就好了。
  • 但是我在创建var print_debounce = $.debounce(print_something, 100);的时候已经给出了具体的参数,那我怎么用不同的来调用呢。

标签: javascript callback debounce


【解决方案1】:

我找到了一种方法,但它不是很具体,而且可能比它应该的更复杂。

var debounce_function = function (func, wait, immediate) { return $.debounce(func, wait, immediate); };

debounce_function(print_something, 1000, false).call();

【讨论】:

  • 每次调用 debounce_function 时都会返回一个新的去抖动函数,对吗?