受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
?我想念什么? 最佳答案
fn(n)
返回到调用点。您的实际函数chainableCounter
不返回任何内容,它没有return语句。
您可以在调用fn
之前添加它,如下所示:
return fn(n);
关于javascript - JavaScript链式关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32171672/