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/

10-12 22:15