我似乎无法将参数传递给回调

时间:2018-12-27 02:28:50

标签: javascript callback arguments

我创建了一个有效的递归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 :(得分:0)

您快到了!这取决于您的目标是什么,您可以使用以下任一选项:

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

答案 1 :(得分:0)

通过这种方式:

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

您不再传递回调,而是执行sayHello函数并将该函数的返回值传递给loopFunc

在这些情况下,您可以做的是使用bind method of functions通过参数传递函数:

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

或者您可以直接传递执行sayHello的函数,以便该参数仍然是函数,并将其用作loopFunc内部的回调:

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

答案 2 :(得分:0)

如果要在基于实参的函数(callback是实参)中传递参数,则需要使用匿名函数。您的代码应改为:

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

const works = () => sayHello('hello'); 
works();