灵感来自 If Hemingway Wrote Javascript ,我正在尝试编写一个带有私有(private)局部变量的可链接函数闭包。
预期的行为是:
> 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()
在应该返回 0
时也返回 undefined
?我错过了什么?
最佳答案
fn(n)
返回调用点。您的实际函数 chainableCounter
不返回任何内容,它没有返回语句。
您可以在调用 fn
之前添加它,如下所示:
return fn(n);
关于Javascript 可链接闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171672/