[英]I can't seem to get my arguments to pass into a callback
我创建了一个工作递归的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()
你快到了! 这取决于您的目标是什么,您可以使用以下任何一种方法:
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()
通过这种方式:
const thisDoesntWork = loopFunc(3, sayHello('hello');
您不再传递回调,而是在执行sayHello
函数并将该函数的返回值传递给loopFunc
。
在这些情况下,您可以做的是使用函数的bind方法通过参数传递函数:
const thisDoesntWork = loopFunc(3, sayHello.bind(sayHello, 'hello'));
或者,您可以直接传递一个执行sayHello
的函数,以便该参数仍然是一个函数,并将其用作loopFunc
内的loopFunc
:
const thisDoesntWork = loopFunc(3, () => sayHello('hello'));
如果要在基于参数的函数中传递参数( callback
是一个参数),则需要使用匿名函数。 您的代码应改为:
function sayHello(input) { console.log(input) } const works = () => sayHello('hello'); works();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.