Javascript 递归,将函数作为参数传递
我想使用递归运行函数一定次数,例如:repeatconsole.log'Hello',3应该打印Hello 3次。我试图实现这样的功能,但它只打印一个单词Hello 函数w,x{ 让乐趣=功能{ 返回参数 } 如果x==1{ 返回funw } 否则{ 返回funw+重复funw,x-1 } }Javascript 递归,将函数作为参数传递,javascript,Javascript,我想使用递归运行函数一定次数,例如:repeatconsole.log'Hello',3应该打印Hello 3次。我试图实现这样的功能,但它只打印一个单词Hello 函数w,x{ 让乐趣=功能{ 返回参数 } 如果x==1{ 返回funw } 否则{ 返回funw+重复funw,x-1 } } repeatconsole.log'Hello',3您没有将函数作为参数传递。您正在调用函数并传递其返回值 只需传递乐趣,无需参数列表。在初始调用中,可以使用匿名函数 函数,x{ 如果x==1{ 还钱
repeatconsole.log'Hello',3您没有将函数作为参数传递。您正在调用函数并传递其返回值 只需传递乐趣,无需参数列表。在初始调用中,可以使用匿名函数 函数,x{ 如果x==1{ 还钱 }否则{ 返回乐趣+重复乐趣,x-1 } } 重复=>console.logHello,3;
console.logrepeata=0=>a+1,5 您没有将函数作为参数传递。您正在调用函数并传递其返回值 只需传递乐趣,无需参数列表。在初始调用中,可以使用匿名函数 函数,x{ 如果x==1{ 还钱 }否则{ 返回乐趣+重复乐趣,x-1 } } 重复=>console.logHello,3;
console.logrepeata=0=>a+1,5 代码中的一些错误: 您没有将函数作为参数传递。 您不需要使用+使两个函数互相紧跟运行。从您最初的代码片段中,我推断您只关心副作用,而不关心值。因此,您可以单独调用这些函数。 它可能看起来像这样: 函数,x{ 如果x<1 return;//尝试已用尽,请终止 fun;//副作用打印到控制台 repeatfun,x-1;//递减计数器并尝试继续 }
repeatfunction{console.loghello},3 代码中的一些错误: 您没有将函数作为参数传递。 您不需要使用+使两个函数互相紧跟运行。从您最初的代码片段中,我推断您只关心副作用,而不关心值。因此,您可以单独调用这些函数。 它可能看起来像这样: 函数,x{ 如果x<1 return;//尝试已用尽,请终止 fun;//副作用打印到控制台 repeatfun,x-1;//递减计数器并尝试继续 }
repeatfunction{console.loghello},3 这段代码有一个递归函数,它接受一个函数并执行它的次数。 函数repeatfunc,x{ ifx==0返回; funcx; repeatfunc,x-1; }
repeatx=>{console.log`Hello${x}`},3 这段代码有一个递归函数,它接受一个函数并执行它的次数。 函数repeatfunc,x{ ifx==0返回; funcx; repeatfunc,x-1; } repeatx=>{console.log`Hello${x}`},3 调用函数repeatconsole.log'Hello',3时,您将函数console.log'Hello'的返回值分配为参数w的值。这会导致函数只显示一个控制台日志,并将未定义的参数分配给w。您要寻找的可能是将函数引用作为第一个参数传递,将该函数的参数作为第二个参数传递,并将调用次数作为第三个参数传递 函数repeatfunc,参数,x{ 如果x==1{ 返回func.callthis,参数; } 否则{ return func.callthis,arguments+repeatfunc,arguments,x-1 } } repeatconsole.log,'Hello',3 调用函数repeatconsole.log'Hello',3时,您将函数console.log'Hello'的返回值分配为参数w的值。这会导致函数只显示一个控制台日志,并将未定义的参数分配给w。您要寻找的可能是将函数引用作为第一个参数传递,将该函数的参数作为第二个参数传递,并将调用次数作为第三个参数传递 函数repeatfunc,参数,x{ 如果x==1{ 返回func.callthis,参数; } 否则{ return func.callthis,arguments+repeatfunc,arguments,x-1 } }
repeatconsole.log,'Hello',3 您需要传递一个函数,并可能使用类似于{}的iterar来重复x次 函数w,x{ 对于设i=0;i
e表示相加的感觉。当然,这意味着该函数不能用于其他组合操作。是的,您的第二个示例确实显示了这一点,因此我对reduce进行了评论。我认为,原始代码片段中的+不是故意的,而是来自于对如何在这种场景中控制流的一般误解。不管怎样,好答案很好。我试图避免在他的代码中更改太多内容。如果你在回答中解释为什么不合适,我会投你一票。不过,把价值加在一起是没有意义的。这种类型的函数不是用来代替reduce,而是用来限制副作用的执行,如下面的例子所示。当然,这意味着该函数不能用于其他组合操作。是的,您的第二个示例确实显示了这一点,因此我对reduce进行了评论。我认为,原始代码片段中的+不是故意的,而是来自于对如何在这种场景中控制流的一般误解。不管怎样,好答案很好。我试图避免在他的代码中更改太多内容。如果你在回答中解释为什么它不合适,我会支持你。显然,使用递归是一项要求。我猜,这是某种课程作业。如果是一项要求,我想最好的答案是:显然,使用递归是一项要求。我猜,这是某种课程作业。如果是要求,我想其他答案最好是:D