Функция обратного вызова Javascript Debounce с динамическими аргументами

Итак, для функции я должен использовать функцию устранения дребезга javascript, которая выглядит так:

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

Есть ли способ сделать это так?

Благодарю вас!


person Edison von Matt    schedule 30.04.2021    source источник
comment
что такое var print_debounce(); ?? Вы можете вызвать function_debounce с произвольным количеством параметров   -  person canbax    schedule 30.04.2021
comment
Извините, это просто print_debounce();   -  person Edison von Matt    schedule 30.04.2021
comment
Я никак не могу вызвать function_debounce с моими выбранными параметрами. Есть ли другой способ реализовать мою функцию function_debounce, чтобы она работала с произвольным числом/значением параметров?   -  person Edison von Matt    schedule 30.04.2021
comment
Вы можете позвонить print_debounce(100).   -  person Bergi    schedule 30.04.2021
comment
Но когда я создал var print_debounce = $.debounce(print_something, 100);, я уже дал конкретные параметры, так как бы я назвал его с другим.   -  person Edison von Matt    schedule 30.04.2021
comment
@EdisonvonMatt Вы имеете в виду, что хотите сделать время wait (после которого станет возможным следующий вызов) динамическим, а не значение, которое передается print_something?   -  person Bergi    schedule 30.04.2021
comment
Да, я хочу, чтобы время ожидания было динамическим, извините за неясность   -  person Edison von Matt    schedule 30.04.2021
comment
Для этого просто переместите параметр wait из функции debounce в возвращаемое замыкание, чтобы вам приходилось указывать его каждый раз: $.debounce = function (func, immediate) { var timeout; return function(wait, ...args) { …   -  person Bergi    schedule 30.04.2021
comment
Это, вероятно, лучшее и красивое решение, чем мое. Благодарю вас!   -  person Edison von Matt    schedule 30.04.2021


Ответы (1)


Я нашел способ, но он не очень ощутим и может быть сложнее, чем должен.

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

debounce_function(print_something, 1000, false).call();
person Edison von Matt    schedule 30.04.2021