高阶函数调用奇怪的行为

Higher Order Function invocation strange behavior

我一直在玩上面的代码,但仍然不知道为什么它会这样:

function myforEach(arr, func){
  for(var i=0; i<arr.length; i++){
    func();
  }
}
var arr = [1,2,3];

function func2(){
 return 3+3;
}

myforEach(arr, func2); // undefined

我创建了一个 myforEach 函数,它接受两个参数,一个数组和一个作为参数传递的函数 func,它在下面的 for 循环中调用了 3 次。然后我声明另一个函数 func2,它 return 是加 3+3 的值。 然后我 运行 带有两个参数的 myforEach 我希望在控制台中打印值 6 的 3 倍,但是 returned 是未定义的。

当我将 func2 语句更改为:

function func2(){
 console.log(3+3);
}

和 运行 我再次获得控制台记录 6 三次。 myforEach(arr, func2); // (3)6

然后我再次将 func2 语句更改为:

function func2(){
 console.log("hi");
}

myforEach(arr, func2); // (3)hi

If Try myforEach(arr, alert); // (3)alert 然而,如果我尝试在 func2 中不带括号 function func2(){alert;} // undefined 发出警报,但是在添加括号 function func2(){alert();} 时它会发出三次警报

所以问题是为什么 function func2(){return 3+3;} 不是 returning 6 三次?因为在 for 循环中 func() 在括号中意味着调用任何添加的函数为什么 func2 没有被正确调用?

我对 Whosebug 进行了一些研究,但我所能得到的只是 return 由于某种原因丢失了,但没有进一步详细解释原因和根本原因。

来晚了,我不知道是我错过了什么还是太困了。任何解释都会有所帮助。谢谢:)

So the question is why is the function func2(){return 3+3;} not returning 6 three times?

它是 — 您只是没有用那个 return 值做任何事情。您将 func2 传递给 myforEach 并以 func 的形式接收它,但是随后:

function myforEach(arr, func){
  for(var i=0; i<arr.length; i++){
    func(); // <=== You're not using the return value for anything
  }
}

只是 returning 值不会导致它在任何地方自动输出。

请注意,内置 forEach 也是这种情况:

console.log("Nothing gets output after this message");
var arr = [1,2,3];
function func2(){
 return 3+3;
}
arr.forEach(func2);

forEach 是故意平淡的,它 nothing 与你给它的函数的 return 值。它不会在任何地方记住它(那将是 map),输出它,将它与其他人相加(那将是 reduce,有效地),等等。你的 myforEach 同样乏味.

该函数按预期返回 6。您需要一种方法来包含该返回值。如果将调用 func2() 分配给任何变量,其值将为 6