我正在跟随javascript中自定义forEach函数的示例。我只是想确保我明白发生了什么......
const myArray = ['red', 'green', 'blue'];
Array.prototype.myLoop = function(func) {
for(let i = 0; i < this.length; i++) {
func(this[i]);
}
}
myArray.myLoop( function(color) {
console.log(color);
});
所以,我理解基本功能在做什么 - 我的困惑在于代码的执行。
例如,如果我输入:
myArray.myLoop(alert)
它会提醒每种颜色 - 注意在这个例子中没有给出参数。
但是,当我使用匿名函数时,我必须包含参数:
myArray.myLoop( function(color) {
console.log(color);
});
现在,从第一个例子开始,我认为我理解了 - &#39; func&#39;是一个参数,在代码中,它表示“将任何作为参数传递的内容”并使用数组中的数据并输出“&#39; - (在这种情况下,提醒)
在第二个例子中 - 传递了匿名函数 - 并在代码中说:
func(this[i]);
所以,在这个例子中,&#39; func&#39;传递参数&#39; this [i]&#39; - 指向当前数组项。所以,基本上,函数需要一个参数,这就是为什么你必须包含&#39; color&#39;在匿名功能 - &#39;颜色&#39;是当前数组项的占位符名称。
我还是有点担心为什么你需要争论这个烦人的功能,而不是那个警告&#39; - 例如:
myArray.myLoop(alert(color));
有人能否了解最新情况。这两个例子的区别是什么?为什么一个参数,而不是另一个?
提前致谢。
答案 0 :(得分:4)
myArray.myLoop(alert)
alert
这是一个现有的定义函数,您将其作为回调传递给myLoop
。
myArray.myLoop(function (color) {
console.log(color);
});
此处function ...
是您即时定义的匿名函数。它相当于:
var f = function (color) {
console.log(color);
};
myArray.myLoop(f);
在这一点上,正如您所看到的那样,您通过alert
的方式没有区别。 f
是一个接受一个参数的函数; function (color) { ... }
是一个接受一个参数的函数。
f(a)
调用带参数的函数
function (p) { ... }
定义带参数的函数(稍后可以调用)。