Javascript 可链接闭包

标签 javascript closures chainable

灵感来自 If Hemingway Wrote Javascript ,我正在尝试编写一个带有私有(private)局部变量的可链接函数闭包。

预期的行为是:

> 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() 在应该返回 0 时也返回 undefined?我错过了什么?

最佳答案

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

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

return fn(n);

关于Javascript 可链接闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171672/

相关文章:

javascript - 使用slideToggle时,如何让所有其他div向后滑动?

javascript - AngularJS View 未填充

groovy - 减少 Groovy 闭包中的代码重复

c - 如何为 C 函数创建闭包

ios - Swift 3 中的闭包速记语法

javascript - IIFE 可链接未正确返回

javascript - HTML, CSS, JS if 语句认为 1==0

javascript - 如何使用 ID 从点击事件的 JSON 文件中获取值并在表单中显示值