创建一个接受另一个函数作为参数的函数

时间:2018-06-01 13:36:29

标签: javascript

我正在跟随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));

有人能否了解最新情况。这两个例子的区别是什么?为什么一个参数,而不是另一个?

提前致谢。

1 个答案:

答案 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) { ... } 定义带参数的函数(稍后可以调用)。