【问题标题】:Understanding the terms iteratee, callback, function factory in JavaScript理解 JavaScript 中的术语迭代、回调、函数工厂
【发布时间】:2016-09-18 20:20:54
【问题描述】:

我正在尝试熟悉 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]

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

  • 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


    【解决方案1】:

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

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

    multiplyBy 不是“本身”的回调,传递给 mapForEachfunc 是。当您将multiplyBy 传递给另一个回调它的方法时,它就变成了一个回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 2012-08-25
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多