此代码块中以下函数的用途是什么?

时间:2014-03-13 18:32:53

标签: javascript function higher-order-functions

我似乎无法弄清楚在 Eloquent Javascript 第6章的练习中包含以下代码块的实际重要性。

编辑:这不是必需的,而是允许从顶层调用它。

function countZeroes(array) {
  return count(equals(0), array);
}

以下是完整代码:

function count(test, array) {
  return reduce(function(total, element) {
    return total + (test(element) ? 1 : 0);
  }, 0, array);
}

function equals(x) {
  return function(element) {return x === element;};
}

function countZeroes(array) {
  return count(equals(0), array);
}

以下是之前的reduce函数:

function reduce(combine, base, array) {
  forEach(array, function (element) {
    base = combine(base, element);
  });
  return base;
}

这是前面的forEach函数:

function forEach(array, action) {
  for (var i = 0; i < array.length; i++)
    action(array[i]);
}

我刚开始学习JavaScript,所以我确信有一个简单的解释。感谢。

2 个答案:

答案 0 :(得分:0)

永远不会调用该方法......

最有可能的目的是能够从顶层调用它。而不是:

show(count(equals(0), [2, 4, 5, 0, 3, 0, 0, 3]));

你可以

var a = [1,4,5,0];
show( countZeroes( a ) );

答案 1 :(得分:0)

因为函数countZeros从未调用过。

我认为原生函数Array.filter更好/更快。

function count (whatToCount, theArrayToCount) {
    return theArrayToCount.filter (function (element) {
        // If they are same, keep; Otherwise remove from array
        return element === whatToCount;
    }).length; // Count the "filtered" Array, and return it.
}

count (0, [2, 4, 5, 0, 3, 0, 0, 3]); // 3
顺便说一句,回调令人困惑(..