Estoy haciendo un clicker de cookies como un juego para practicar Javascript. El objetivo de la función addFarm(farmAdd) es agregar una cierta cantidad de granjas cuando se llama. Al usar console.log, descubrí que setinterval se ejecuta dos veces cada 1000 ms en lugar de una vez cada 1000 ms, lo que hace que el conteo de bananas se agregue +30 cada segundo en lugar de +15. Me imagino que se debe a que la función addFarm se llama dos veces en el código, pero la primera vez está en una declaración if que no debería ejecutarse ya que la variable addFarm1 está establecida en verdadero y no en falso.
Soy nuevo en javascript (alrededor de una semana) y no puedo entender por qué hace esto. Cualquier ayuda sería apreciada
function addFarm(farmAdd) { // this is the function farmCount = farmCount + farmAdd; farmAdd = 0; farmIncrement = farmCount * 5; farmCountText.textContent = farmCount + ' (+' + farmIncrement + ')'; setInterval(function() { // this part is executed twice every 1000ms bananaCount = bananaCount + farmIncrement; bananaCountText.textContent = bananaCount; console.log(farmIncrement); }, 1000); } function bananaClick() { bananaCount += 1; if (bananaCount > 10000) { bananaClicked.textContent = 'Golden Banana Bunch (+15)'; banana.src = 'images/banana6.png'; countByTwo(3); if (!addFarm1) { addFarm(1); addFarm1 = true; } } if (bananaCount > 15000) { bananaClicked.textContent = 'Mario Banana (+23)'; banana.src = 'images/banana7.png'; countByTwo(4); if (!addFarm2) { addFarm(2); addFarm2 = true; } } bananaCountText.textContent = bananaCount; }hay más código, pero no lo he agregado, así que puedo acortar la publicación, pero si necesita más contexto, pregunte por favor :)
Me imagino que cuando vinculó el evento de clic para bananaClick, puede estar haciéndolo dos veces.
Por ejemplo:
document.addEventListener('click', () => console.log('c'), ) document.addEventListener('click', () => console.log('c'), )Imprimirá c dos veces cada vez que se haga clic.
Si solo habrá un temporizador funcionando a la vez, puede borrarlo cada vez que se llame.
let timer; let a = () => { clearInterval(timer) timer = setInterval( ()=> { console.log('bananas') }, 2000) } a() a() a() // only one timer will be active