实现一个函数,该函数将函数作为其第一个参数,数字num作为其第二个参数,然后执行传入的函数num次。
function repeat(operation, num) {
var num_array = new Array(num);
for(var i = 0; i < num_array.length; i++){
return operation(num);
}
}
//
// The next lines are from a CLI, I did not make it.
//
// Do not remove the line below
module.exports = repeat
结果:
ACTUAL EXPECTED
------ --------
"Called function 1 times." "Called function 1 times."
"" != "Called function 2 times."
null != ""
# FAIL
为什么这不起作用?
我假设我正在启动一个名为repeat的函数。重复有两个参数,并带两个参数。
对于循环,我创建一个数组,其长度等于传入的数字。
然后我启动一个for循环,将一个计数器变量i设置为0.然后我设置一个条件,表明我应该总是小于之前创建的num_array的长度。然后使用++将计数器i递增1。
每当条件为真时,我们应该返回调用运行函数操作的值并将num作为参数传递。
最后两行允许通过命令行轻松运行程序,并使用预先编程的参数。
感谢您的时间!
答案 0 :(得分:2)
return
语句在循环的第一次迭代中突破了该函数。您需要删除return
,然后调用此函数:
function repeat(operation, num) {
for(var i = 0; i < num; i++){
operation(num);
}
}
请注意,我已经删除了数组的创建和迭代,您不需要它来执行此处的操作。
此外,您的初始问题并未指明您需要将num
传递给该功能(但您会在下面的步骤中将其列出),因此您可以只执行operation()
而不是operation(num)
。
答案 1 :(得分:0)
您可能需要类似下面的内容,而不是return
要将值存储在数组中的函数operation(num)
的结果。循环中的return
突然出现循环,所以它总是只运行一次..
function repeat(operation, num) {
var num_array = new Array(num);
for(var i = 0; i < num_array.length; i++){
num_array[i] = operation(num);
}
}
//
// The next lines are from a CLI, I did not make it.
//
// Do not remove the line below
module.exports = repeat
答案 2 :(得分:0)
如果你问为什么循环没有运行,那是因为你必须在定义它之后运行该函数(我假设你还没有在其他地方调用函数)。
调用函数repeat
后,您将看到它在一次迭代后退出。这是因为您正在返回操作 - 返回导致函数结束。要保持循环,您只需拨打operation()
,而不需要return
。
此外,您不需要创建数组,只需使用您在for循环中定义的计数器。
所以代码看起来像这样:
var op = function(arg) {console.log(arg);},
n = 5;
function repeat(operation, num) {
for(var i = 0; i < num; i++){
operation(i);
}
}
repeat(op ,n);
// The next lines are from a CLI, I did not make it.
//
// Do not remove the line below
module.exports = repeat