我的目的是创建一个安全计数器,并通过调用一个函数将其重置。我尝试了这段代码:
function ZeroCounter () { var c = 0 ; return function() { return ++c } };
const Counter = ZeroCounter();
但是没有按我预期的那样工作。 ZeroCounter不会重置var C
。我注意到function() return
创建了一个新对象。
var m = ZeroCounter(); var n = ZeroCounter();
m === n //return false
我尝试了ZeroCounter的新代码。
function ZeroCounter () { var c = 0 ; ret = function() { return ++c }; return ret };
事实上,没有新结果的理由。那么,我该怎么做才能达到我的意图:创建一个可重置的嵌套变量?还是不可能这样?
答案 0 :(得分:0)
您可以使用函数的参数并将其重置为所需的值。
function counter() {
var c = 0;
return function(v) {
if (v !== undefined) c = v;
return ++c
};
}
const counterA = counter();
console.log(counterA());
console.log(counterA());
console.log(counterA());
console.log(counterA(0));
console.log(counterA());
console.log(counterA());
答案 1 :(得分:0)
基本上,您每次执行c
时都会重新创建ZeroCounter
。要解决此问题,请将c
移动到ZeroCounter
之外。
var c = 0;
function ZeroCounter() {
return ++c;
}
var m = ZeroCounter();
var n = ZeroCounter();
console.log(m);
console.log(n);
如果您想在c
中包含ZeroCounter
,但仍然想要效果,请使用Immediately Invoked Function Expression or IIFE
var ZeroCounter = (function () {
var c = 0;
return function () {
return ++c;
};
}());
var m = ZeroCounter();
var n = ZeroCounter();
console.log(m);
console.log(n);