理解 JavaScript 中的术语 iteratee、回调、函数工厂

ira*_*ira 1 javascript factory terminology callback iterate

我正在努力熟悉 JavaScript 术语。我想我对iterateecallbackfunction 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]
Run Code Online (Sandbox Code Playgroud)

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

  • iteratee(又名predicate)是一个做一些工作的函数对象。在这个例子中mapForEach接受一个func对象来对arr元素做一些工作,所以func可以称为iteratee,因此multiplyBy是一个iteratee。在一般概念中,multiply也可以将迭代器视为执行基本工作的独立函数。
  • callback是一个函数 A,您提供给另一个函数 B 以供另一个函数调用(因此,另一个函数 B - 可以说是排序 - “回调”函数 A)。在这个例子中,当mapForEach被调用时,在一个新环境中执行,在那里它回调func函数对象。所以func对象也可以称为回调。然而,在同样的情况下,mapForEach也可以看作是一个函数,在执行的时候,回调的multiplyBy功能,即multiplyBy是一个回调
  • 函数工厂我们调用一个为我们做一些工作和/或返回一个值的函数(即数组、对象、函数对象,等等……)。在我们的例子中multiplyBy是一个函数对象,当它被调用时,它返回(一个副本)另一个在其闭包multiply中有multiplier参数的函数对象()。因此multiplyBy是一个工厂函数

我做对了所有这些吗,(或者我疯了:-P)

Wik*_*hla 5

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

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

multiplyBy不是“本身”的回调,func传递给的mapForEach是。将multiplyBy成为当你把它传递给调用它后面的另一种方法的回调。