Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript高阶函数循环/递归/混淆_Javascript_For Loop_Functional Programming - Fatal编程技术网

JavaScript高阶函数循环/递归/混淆

JavaScript高阶函数循环/递归/混淆,javascript,for-loop,functional-programming,Javascript,For Loop,Functional Programming,实现一个函数,该函数将函数作为第一个参数,将num作为第二个参数,然后执行传入的函数num次 为什么这样不行 我假设我正在启动一个名为repeat的函数。Repeat有两个参数并接受两个参数 对于循环,我创建了一个数组,其长度等于传入的num 然后启动for循环,将计数器变量I设置为0。然后我设置了一个条件,该条件表示我应该始终小于先前创建的num_数组的长度。然后使用++将计数器i递增1 对于条件为true的每一次,我们都应该返回调用运行函数操作并将num作为参数传递的值 最后两行允许通过使用

实现一个函数,该函数将函数作为第一个参数,将num作为第二个参数,然后执行传入的函数num次

为什么这样不行

我假设我正在启动一个名为repeat的函数。Repeat有两个参数并接受两个参数

对于循环,我创建了一个数组,其长度等于传入的num

然后启动for循环,将计数器变量I设置为0。然后我设置了一个条件,该条件表示我应该始终小于先前创建的num_数组的长度。然后使用++将计数器i递增1

对于条件为true的每一次,我们都应该返回调用运行函数操作并将num作为参数传递的值

最后两行允许通过使用预编程参数的命令行轻松运行程序


谢谢你抽出时间

您可能需要如下内容,而不是
返回函数的结果
操作(num)
您希望将值存储在数组中<循环中的code>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 
函数重复(操作,num){
var num_array=新数组(num);
对于(var i=0;i
在循环的第一次迭代中,
return
语句将中断函数。您需要删除
返回
,然后像这样调用函数:

function repeat(operation, num) {
  for(var i = 0; i < num; i++){
    operation(num);
  }
}
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 
函数重复(操作,num){
对于(变量i=0;i
请注意,我已经删除了数组的创建和迭代,在这里您不需要它


另外,您最初的问题没有指定您需要将
num
传递给函数(但您在下面的步骤中列出了它),因此如果您询问循环为什么没有运行,您可以只执行
operation()
而不是
operation(num)

,这是因为您必须在定义函数后运行该函数(我假设您尚未在其他地方调用该函数)

调用函数
repeat
后,您将看到它在一次迭代后退出。这是因为您正在返回操作-返回将导致函数结束。要留在循环中,只需调用
operation()
,而无需返回

另外,您不需要创建数组,只需使用在for循环中定义的计数器即可

所以代码看起来像这样:

function repeat(operation, num) {
  for(var i = 0; i < num; i++){
    operation(num);
  }
}
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 
var op=function(arg){console.log(arg);},
n=5;
函数重复(操作,num){
对于(变量i=0;i
您不需要阵列。您是如何测试您的功能的?它是由我正在使用的CLI自动测试的<代码>实际预期----------------“调用函数1次。”“调用函数1次。”“”!=“调用函数2次。”null!=“”#失败
将实际结果和预期结果添加到您的帖子中(使用
编辑
)。成功了,谢谢!这是解决问题的一个聪明办法。这几乎像是.map函数。啊,是的,这也有道理。谢谢OP特别声明参数是从其代码外部传递给函数的。