2016-06-17 3 views
0

Первая кнопка работает нормально. Когда я нажимаю на него, id добавляет одно к предыдущему значению. Вторая кнопка должна быть сброшена на 0. Это также работает, но когда я нажимаю на первой кнопке еще раз, она увеличивает старое значение (предшествующее):Как сбросить анонимную функцию

  • Контадор() значение -> 1
  • значение
  • Контадор() -> 2
  • ) значение Контадор (-> 3 значение
  • сброса() -> 0
  • значение
  • Контадор() -> 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>

+2

Почему с помощью функции Anonymouse для этой простой вещи? однако вам необходимо установить contador в ноль, а не в innerHTML –

+0

, вы не устанавливаете значение переменной «contador». просто установка значения innerHTML не влияет на переменную. – SenthilKumarM

+0

Я пробовал contador = 0; но он не работает – Manfly

ответ

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(); 
 
}
<button type="button" onclick="llamar()">contar</button> 
 
<button type="button" onclick="reset()">reset</button> 
 
<p id="valor">0</p>

+0

это работает для меня, спасибо! – Manfly

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, это позволит нескольким функциям изменять значение переменной «private» contador

0

Все, что вы делаете, устанавливает текст «доблесть» в 0. Когда вы нажимаете кнопку, чтобы увеличить ее, contador все равно будет находиться на том, что вы оставили на нем, поэтому он просто увеличит свое значение и отобразит это. Я не уверен, почему вы используете анонимную функцию, но вам нужен способ изменить фактическое значение contador. Вы можете сделать это глобальной переменной, возможно, но есть лучшие способы структурирования этого кода.

0

Другие ответы показаны способы реструктуризации кода, так что llamar и reset ac выведите один и тот же счетчик внутри анонимной функции. Хранение счета в closure, как это, однако, кажется более сложным, чем необходимо.

Подход ООП должен состоять в том, чтобы создать объект, содержащий счетчик как значение свойства, с дополнительными методами для увеличения, сброса или считывания значения счета. Такой объект не делает значение count приватным каким-либо образом.

В качестве альтернативы можно использовать даже HTML элемент для подсчета целей:

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

function reset(){ 
    document.getElementById("valor").innerHTML = 0; 
} 
Смежные вопросы