我试图对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]
所以,到目前为止我的理解:
mapForEach
接受func
对象与arr
元素进行一些工作,因此 func
可以称为 iteratee < / strong>因此 multiplyBy
是 iteratee 。在一般概念中, multiply
也可以被视为 iteratee ,因为它是执行基本工作的独立函数。mapForEach
时,将在新环境中执行,并在其中回调func
函数对象。因此 func
对象也可以称为回调 。但是,在相同的上下文中,mapForEach
也可以被视为一个函数,在执行时会回调multiplyBy
函数,即 multiplyBy
是回调 。multiplyBy
是一个函数对象,当它被调用时,它返回另一个函数对象(multiply
)的副本(在其闭包中具有multiplier
参数)。因此, multiplyBy
是工厂职能 。我得到了所有这些,(或者我疯了:-P)
答案 0 :(得分:3)
Iteratee不是一个只做一些工作的功能。它必须在可迭代集上做一些工作,例如数组。谓词是一个接受参数并返回true / false的函数,谓词例如用于过滤可迭代集。因此,iteratee和谓词绝对不一样。
函数工厂不仅仅是一个工作并返回值的函数。它是一个能够根据提供的参数创建一系列其他函数的函数。
ejabberd_hooks:add(Hook, Host, Module, Function, Priority)
不是回调&#34;本身&#34;,传递给multiplyBy
的{{1}}是。将func
传递给另一个调用它的方法时,mapForEach
将成为回调函数。