重置JavaScript中受保护/嵌套变量的计数器

时间:2019-05-08 12:05:46

标签: javascript counter nested-function

我的目的是创建一个安全计数器,并通过调用一个函数将其重置。我尝试了这段代码:

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 };

事实上,没有新结果的理由。那么,我该怎么做才能达到我的意图:创建一个可重置的嵌套变量?还是不可能这样?

2 个答案:

答案 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);