我試圖瞭解從書中雄辯JavaScript本實用的風格代碼:的JavaScript:匿名VS輔助功能
http://eloquentjavascript.net/chapter6.html#exercise1
當count()函數傳遞一個匿名函數來減少()的代碼作品。但是如果我把這個函數分解成一個輔助函數,那麼我會得到一個引用錯誤。
任何人都可以解釋爲什麼計數()的作品,但countHelper()不?
var numbers = [1,2,3,0,1,2,3,0]
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}
function equals(x) {
return function(element) { return x === element;};
}
function count(test, array) {
return reduce(function(base, element) {
return base + (test(element)?1:0);
}, 0, array);
}
function countHelper(test, array) {
function helper(base, element) {
return base + (test(element)?1:0);
}
return reduce(helper(base, element), 0, array);
}
function countZeroes(array) {
return count(equals(0), array);
}
print(countZeroes(numbers)) // 2
function countZeroesHelper(array) {
return countHelper(equals(0), array);
}
print(countZeroesHelper(numbers)) // ReferenceError: base is not defined