Javascript Chainable Closure

Javascript Chainable Closure

本文关键字:Closure Chainable Javascript      更新时间:2023-09-26

受《如果海明威写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没有返回任何东西,它没有返回语句。

你可以在调用fn之前添加它,像这样:

return fn(n);

应该是

return fn(n);