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);
受到 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);