【发布时间】:2016-09-18 20:20:54
【问题描述】:
我正在尝试熟悉 JavaScript 术语。我想我对 iteratee、callback 和 function factory
等术语感到困惑让我用下面这个愚蠢的例子:
//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(又名predicate)是一个函数对象,它可以做一些工作。在这个例子中,
mapForEach接受一个func对象来处理arr元素,所以func可以被称为 iteratee 并因此multiplyBy是一个迭代器。在一般概念中,multiply也可以被视为 iteratee,因为它是执行基本工作的独立函数。 -
callback 是一个函数 A,你给另一个函数 B 以由另一个函数调用(因此,另一个函数 B --sort to speak --“回调”函数 A)。在此示例中,当调用
mapForEach时,将在一个新环境中执行,并在该环境中回调func函数对象。所以func对象也可以称为callback。但是,在同样的上下文中,mapForEach也可以被认为是一个函数,它在执行时会回调multiplyBy函数,即multiplyBy也是一个回调。 -
函数工厂我们调用一个为我们做一些工作和/或返回一个值的函数(即一个数组、对象、函数对象等等......)。在我们的示例中,
multiplyBy是一个函数对象,当它被调用时,它会返回(一个副本)另一个函数对象 (multiply),该函数对象 (multiplier) 在其闭包中具有multiplier参数。因此multiplyBy是一个工厂函数。
我做对了所有这些吗,(或者我要疯了:-P)
【问题讨论】:
标签: javascript callback factory terminology iterate