了解 JavaScript 中的术语迭代器、回调、函数工厂
Understanding the terms iteratee, callback, function factory in JavaScript
我正在努力熟悉 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
是一个 iteratee。在一般概念中,也许 multiply
也可以被视为 iteratee 作为执行基本工作的独立函数。
- callback 是一个函数 A 你给另一个函数 B 由另一个函数调用(所以,另一个函数 B --sort to speak-- "calls back" 函数 A)。在这个例子中,当
mapForEach
被调用时,在一个新的环境中执行,它回调 func
函数对象。所以func
对象也可以称为回调。但是,在同样的上下文中,mapForEach
也可以认为是一个函数,当执行时,会回调multiplyBy
函数,即multiplyBy
是一个回调 太.
- 函数工厂 我们调用一个为我们做一些工作的函数 and/or return 一个值(即数组,对象,函数对象,无论什么....)。在我们的例子中
multiplyBy
是一个函数对象,当它被调用时 return 是另一个函数对象 (multiply
) 的(副本),它的参数中有 multiplier
关闭。因此 multiplyBy
是一个 工厂函数 .
我做对了吗,(或者我快疯了:-P)
Iteratee 不是一个只做一些工作的函数。它必须对一个可迭代集做一些工作,例如一个数组。谓词是一个接受参数和 returns true/false 的函数,谓词例如用于过滤可迭代集。因此,iteratee 和 predicate 绝对不是一回事。
函数工厂不仅仅是一个做一些工作的函数和 returns 一个值。它是一个能够根据提供的参数创建一系列其他函数的函数。
multiplyBy
不是回调 "per se",传递给 mapForEach
的 func
是。当您将 multiplyBy
传递给另一个回调它的方法时,它会成为回调。
我正在努力熟悉 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
是一个 iteratee。在一般概念中,也许multiply
也可以被视为 iteratee 作为执行基本工作的独立函数。 - callback 是一个函数 A 你给另一个函数 B 由另一个函数调用(所以,另一个函数 B --sort to speak-- "calls back" 函数 A)。在这个例子中,当
mapForEach
被调用时,在一个新的环境中执行,它回调func
函数对象。所以func
对象也可以称为回调。但是,在同样的上下文中,mapForEach
也可以认为是一个函数,当执行时,会回调multiplyBy
函数,即multiplyBy
是一个回调 太. - 函数工厂 我们调用一个为我们做一些工作的函数 and/or return 一个值(即数组,对象,函数对象,无论什么....)。在我们的例子中
multiplyBy
是一个函数对象,当它被调用时 return 是另一个函数对象 (multiply
) 的(副本),它的参数中有multiplier
关闭。因此multiplyBy
是一个 工厂函数 .
我做对了吗,(或者我快疯了:-P)
Iteratee 不是一个只做一些工作的函数。它必须对一个可迭代集做一些工作,例如一个数组。谓词是一个接受参数和 returns true/false 的函数,谓词例如用于过滤可迭代集。因此,iteratee 和 predicate 绝对不是一回事。
函数工厂不仅仅是一个做一些工作的函数和 returns 一个值。它是一个能够根据提供的参数创建一系列其他函数的函数。
multiplyBy
不是回调 "per se",传递给 mapForEach
的 func
是。当您将 multiplyBy
传递给另一个回调它的方法时,它会成为回调。