重置 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);
我的意图是创建一个安全计数器并通过调用函数重置它。我试过这段代码:
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);