我一直在玩上面的代码,但仍然不知道为什么它会像这样:
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,它返回加3 + 3的值。
然后我使用两个参数运行myforEach
,我希望在控制台中打印3次值6,但是返回的内容是未定义的。
当我将func2语句更改为:
时function func2(){
console.log(3+3);
}
再次运行我将控制台记录6次三次。 myforEach(arr, func2); // (3)6
然后我再次将func2语句更改为:
function func2(){
console.log("hi");
}
myforEach(arr, func2); // (3)hi
如果尝试myforEach(arr, alert); // (3)alert
但是如果我尝试在没有括号function func2(){alert;} // undefined
的情况下在func2中发出警报,但是在添加括号function func2(){alert();}
时会发出三次警报
所以问题是为什么function func2(){return 3+3;}
没有返回6次?因为在for循环中func()在括号中意味着调用添加的任何函数,为什么不正确调用func2?
我对stackoverflow进行了一些研究,但我得到的只是由于某种原因导致丢失,但没有进一步详细解释为什么和根本原因。
在这里已经很晚了,我不知道我是在遗失某些东西还是太困了。任何解释都会有所帮助。谢谢:))
答案 0 :(得分:2)
所以问题是为什么函数func2(){return 3 + 3;}三次没有返回6?
它是 - 你只是没有做任何返回值。您已将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
}
}
只返回该值不会导致它在任何地方自动输出。
请注意,内置forEach
也是如此:
console.log("Nothing gets output after this message");
var arr = [1,2,3];
function func2(){
return 3+3;
}
arr.forEach(func2);
forEach
故意是乏味的,它使用您提供的函数的返回值 nothing 。它不记得任何地方(那将是map
),输出它,与其他人(有效地reduce
总结),等等。你的myforEach
同样是乏味的