Javascript 链式闭包

Javascript Chainable Closure

受到 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) returns undefined 而不是函数对象似乎表明我们永远不会碰到 return fn; 行。但不仅如此,为什么 chainableCounter() 在应该 return 0 的时候也 returning undefined?我错过了什么?

应该是

return fn(n);

因为 JavaScript 需要明确的 return 声明。

fn(n)returns到调用点。您的实际函数 chainableCounter 没有 return 任何东西,它没有 return 语句。

您可以在调用 fn 之前添加它,如下所示:

return fn(n);