受If Hemingway Wrote Javascript的启发,我正在尝试使用私有局部变量编写可链接的函数闭包。
预期的行为是:
> chainableCounter()
0
> chainableCounter(1)(2)()
3
这是我的代码:
function chainableCounter(n) {
var acc = 0;
var fn = function (x) {
if (x === undefined) {
return acc;
} else {
acc = acc + x;
return fn;
}
};
fn(n);
}
当我尝试在节点 REPL 中运行它时,这就是我得到的:
> chainableCounter()
undefined
> chainableCounter(1)
undefined
> chainableCounter(1)()
TypeError: undefined is not a function
chainableCounter(1)
返回而undefined
不是一个函数对象似乎表明我们从来没有打过线return fn;
。但不仅如此,为什么chainableCounter()
还undefined
应该返回时返回0
?我错过了什么?