理解JavaScript

时间:2016-05-21 17:05:12

标签: javascript callback factory terminology iterate

我试图对JavaScript术语有点熟悉。我认为我对术语 iteratee 回调功能工厂

感到困惑

让我使用以下愚蠢的例子:

//this function accept an array and then  returns a new array that
//contains the elements of the first array altered by func
function mapForEach(arr, func) {
   var newArr = [];
   for (var i = 0; i < arr.length; i++) {
    newArr.push(func(arr[i]));
  }
 return newArr;
}

//this function multiplies two numbers
var multiply = function (a, b) {
 console.log(a * b);
};

//this is a silly function that passes a multiplier as the first
//argument of the multiply function
var multiplyBy = function(multiplier) {
 return multiply.bind(this, multiplier);
};

var arr = [1, 2, 3];

mapForEach(arr, multiplyBy(3)); //[6, 10, 20]

所以,到目前为止我的理解:

  • iteratee (又名谓词)是一个可以完成某些工作的函数对象。在此示例中,mapForEach接受func对象与arr元素进行一些工作,因此 func可以称为 iteratee < / strong>因此 multiplyBy iteratee 。在一般概念中, multiply也可以被视为 iteratee ,因为它是执行基本工作的独立函数。
  • 回调是一个函数A,你给另一个函数B要另一个函数调用(所以,另一个函数B - 要说话 - “回调”函数A) 。在此示例中,调用mapForEach时,将在新环境中执行,并在其中回调func函数对象。因此 func对象也可以称为回调 。但是,在相同的上下文中,mapForEach也可以被视为一个函数,在执行时会回调multiplyBy函数,即 multiplyBy回调
  • 函数工厂我们调用一个函数为我们做一些工作和/或返回一个值(即数组,对象,函数对象,等等......)。在我们的示例中,multiplyBy是一个函数对象,当它被调用时,它返回另一个函数对象(multiply)的副本(在其闭包中具有multiplier参数)。因此, multiplyBy工厂职能

我得到了所有这些,(或者我疯了:-P)

1 个答案:

答案 0 :(得分:3)

Iteratee不是一个只做一些工作的功能。它必须在可迭代集上做一些工作,例如数组。谓词是一个接受参数并返回true / false的函数,谓词例如用于过滤可迭代集。因此,iteratee和谓词绝对不一样。

函数工厂不仅仅是一个工作并返回值的函数。它是一个能够根据提供的参数创建一系列其他函数的函数。

ejabberd_hooks:add(Hook, Host, Module, Function, Priority) 不是回调&#34;本身&#34;,传递给multiplyBy的{​​{1}}是。将func传递给另一个调用它的方法时,mapForEach将成为回调函数。