如何重置匿名函数

时间:2016-06-17 21:01:15

标签: javascript

第一个按钮工作正常。当我点击它时,id会将前一个值加1。第二个按钮应重置为0。这也有效,但当我再次点击第一个按钮时,它会增加旧的(前一个)值:

  • contador()值 - > 1
  • contador()值 - > 2
  • contador()值 - > 3
  • reset()值 - > 0
  • contador()值 - > 4



 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;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

一个功能中加上增量重置,因为您需要同时访问私有变量功能:

&#13;
&#13;
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;
&#13;
&#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)

其他答案已经显示了重构代码的方法,以便llamarreset访问匿名函数内的同一个计数器。然而,将计数存储在这样的closure中似乎比必要的更复杂。

OOP方法是创建一个对象,将计数作为属性值,并使用其他方法来递增,重置或读取计数值。这样的对象不会以任何方式使计数值变为私有。

或者你甚至可以使用HTML元素进行计数:

function llamar(){
  var contador = document.getElementById("valor");
  contador.innerHTML = + contador.innerHTML + 1;
}

function reset(){
  document.getElementById("valor").innerHTML = 0;
}