1

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?我错过了什么?

4

2 回答 2

2

应该

return fn(n);

因为 JavaScript 需要一个显式的 return 语句。

于 2015-08-23T21:24:09.557 回答
2

fn(n)返回到调用点。您的实际函数chainableCounter不返回任何内容,它没有返回语句。

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

return fn(n);
于 2015-08-23T21:24:21.140 回答