Я не могу передать свои аргументы в обратный вызов - PullRequest
0 голосов
/ 27 декабря 2018

Я создал рабочий рекурсивный цикл for, но он работает, только если мой обратный вызов не имеет аргументов.Я пробовал callback(arguments) и callback(...arguments).

Спасибо за любую помощь, которую вы можете предоставить!

function loopFunc (numOfSteps, callback) {
    let i = 0;

    if (i >= numOfSteps) {
        let i = 0
        return
    } 
    callback()
    loopFunc(numOfSteps - 1, callback)`enter code here`
}

Работает, если обратный вызов не принимает аргументов:

function noArgsHello() {
    console.log('hello')
}

const thisWorks = loopFunc(3, noArgsHello);
thisWorks()

Не работает, если обратный вызов принимает аргумент:

function sayHello (input) {
    console.log(input)
}

const thisDoesntWork = loopFunc(3, sayHello('hello');
thisDoesntWork()

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Таким образом:

const thisDoesntWork = loopFunc(3, sayHello('hello');

Вы больше не передаете обратный вызов, но выполняете функцию sayHello и передаете возвращенное значение этой функции в loopFunc.

В этих случаях вы можете использовать метод связывания функций для передачи функции с аргументами:

const thisDoesntWork = loopFunc(3, sayHello.bind(sayHello, 'hello'));

Или вы можете напрямую передать функцию, которая выполняет ваш sayHello, так что аргумент все еще является функцией, и он будет использоваться как обратный вызов внутри вашего loopFunc:

const thisDoesntWork = loopFunc(3, () => sayHello('hello'));

0 голосов
/ 27 декабря 2018

Вам необходимо использовать анонимную функцию, если вы хотите передать параметры в функцию, основанную на аргументах (callback является аргументом).Вместо этого ваш код должен быть таким:

function sayHello(input) {
  console.log(input)
}

const works = () => sayHello('hello'); 
works();
0 голосов
/ 27 декабря 2018

Ты почти там!Это зависит от вашей цели, вы можете использовать любой из вариантов:

function loopFunc (numOfSteps, callback) {
let i = 0;

  if (i >= numOfSteps) {
      let i = 0
      return
  }

 callback(numOfSteps)
 loopFunc(numOfSteps - 1, callback);
}

function printExtraStuff(greeting) {
  return (val) => { console.log('greeting ', val)}
}

function printSteps(num) {
    console.log(num);
}

var test1 = function() { loopFunc(3, printExtraStuff('hi there') )};
test1()

var test2 = function() { loopFunc(3, printSteps )};
test2()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...