从头开始每一个下划线

时间:2015-08-04 20:39:02

标签: javascript underscore.js

我正在练习_.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会返回与传递参数相同的值,但我不太清楚它在这里是如何适用的?

2 个答案:

答案 0 :(得分:1)

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

为什么这会有用?因为它使_.every(someArray)成为一个测试,以查看数组中的所有条目是否都是“真实的”。例如,如果你有一个你知道的数组包含数字,并且你想看看它们是否都是非零的,你可以使用只有一个参数(数组)的_.every()进行测试

答案 1 :(得分:1)

_.identity是一个返回传入内容的函数.f(x)= x

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