第一个按钮工作正常。当我点击它时,id会将前一个值加1。第二个按钮应重置为0
。这也有效,但当我再次点击第一个按钮时,它会增加旧的(前一个)值:
var sumar = (function() {
var contador = 0;
return function() {
return contador += 1;
}
})();
function llamar() {
document.getElementById('valor').innerHTML = sumar();
}
function reset() {
document.getElementById('valor').innerHTML = 0;
}

<button type="button" onclick="llamar()">contar</button>
<button type="button" onclick="reset()">reset</button>
<p id="valor">0</p>
&#13;
答案 0 :(得分:1)
在一个功能中加上增量和重置,因为您需要同时访问私有变量功能:
var makeCounter = function() {
var count = 0; // Private variable
return {
increment: function() {
return count += 1;
},
reset: function() {
count = 0;
return count;
}
}
}
var c = makeCounter();
function llamar() {
document.getElementById('valor').innerHTML = c.increment();
}
function reset() {
document.getElementById('valor').innerHTML = c.reset();
}
&#13;
<button type="button" onclick="llamar()">contar</button>
<button type="button" onclick="reset()">reset</button>
<p id="valor">0</p>
&#13;
答案 1 :(得分:0)
如果你稍微改一下,你目前无法对你的设置进行此操作,但是......
var sumar, resetContador;
(function() {
var contador = 0;
sumar = function() { return contador++; }
resetContador = function() { contador = 0; return contador; }
})();
var reset = function () { document.getElementById('valor').innerHTML = resetContador(); };
编辑:我应该解释一下,你不能这样做是因为你已经将contador包含在一个无法从外部访问的范围内,所以要解决这个问题,你必须在闭包中定义增量和重置函数contador变量,这将允许多个功能改变私人&#39;的价值。 contador变量
答案 2 :(得分:0)
您所做的只是设置“勇敢”的文字。当你点击按钮增加它时,contador仍将是你所留下的任何东西,所以它只是递增它的值并显示它。我不确定你为什么要使用匿名函数,但是你需要一种方法来改变contador的实际价值。你可以把它变成一个全局变量,但是有更好的方法来构造这个代码。
答案 3 :(得分:0)
其他答案已经显示了重构代码的方法,以便llamar
和reset
访问匿名函数内的同一个计数器。然而,将计数存储在这样的closure中似乎比必要的更复杂。
OOP方法是创建一个对象,将计数作为属性值,并使用其他方法来递增,重置或读取计数值。这样的对象不会以任何方式使计数值变为私有。
或者你甚至可以使用HTML元素进行计数:
function llamar(){
var contador = document.getElementById("valor");
contador.innerHTML = + contador.innerHTML + 1;
}
function reset(){
document.getElementById("valor").innerHTML = 0;
}