我似乎无法弄清楚在 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,所以我确信有一个简单的解释。感谢。
答案 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
顺便说一句,回调令人困惑(..