重置 JavaScript 中 protected/nested 变量的计数器

Reseting a counter of a protected/nested variable in JavaScript

我的意图是创建一个安全计数器并通过调用函数重置它。我试过这段代码:

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

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

您可以使用函数的参数并重置为所需的值。

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());

基本上,每次执行 ZeroCounter 时,您都是 re-creating c。要解决这个问题,请将 c 移到 ZeroCounter.

之外

var c = 0;

function ZeroCounter() {
    return ++c;
}

var m = ZeroCounter();
var n = ZeroCounter();
console.log(m);
console.log(n);

如果您想在 ZeroCounter 中包含 c 但仍然想要效果,请使用 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);