从头开始强调每一个

Underscore every from scratch

我正在从头练习_.every学习Javascript,就两行没看懂。你能说清楚这些行在做什么吗:

if(iterator == undefined) { 
  iterator = _.identity; 

_.every = function(collection, iterator) {
  if(iterator == undefined) { 
    iterator = _.identity; 
  }

  return _.reduce(collection, function(accumulator, item) {
    if (iterator(item)) {
      return accumulator;
    }
    else {
      return false;
    }
  }, true); 
};

我知道 _.identity returns 与用作传递参数的值相同,但我不太明白它在这里如何适用?

如果 iterator 参数是 undefined,该语句使 _.every 使用 _.identity 作为默认迭代器。

为什么这会有用?因为它使 _.every(someArray) 成为一个测试,以查看数组中的所有条目是否都是 "truthy"。例如,如果您有一个您知道包含数字的数组,并且您想要查看它们是否全为非零,则可以使用 _.every() 和仅一个参数(数组)来进行该测试.

_.identity 是一个 returns 你传入的函数。 f(x) = x

如果您在没有迭代器的情况下调用 _.every,则迭代器默认设置为 _.identity。这允许您调用 _.every 而无需传入您自己的迭代器。这基本上只是一种方便,因为如果需要,您可以自己传入 _.identity