高阶函数调用奇怪的行为
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
我一直在玩上面的代码,但仍然不知道为什么它会这样:
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