函数在不应该执行时执行两次



我正在制作一个cookie clicker类游戏来练习Javascript。addFarm(farmAdd)函数的作用是在调用时添加一定数量的农场。使用console.log,我发现setinterval每1000毫秒执行两次,而不是每1000毫秒执行一次,导致香蕉计数每秒增加+30而不是+15。我想这是因为addFarm函数在代码中被调用了两次,但第一次它是在一个if语句中,不应该执行,因为addFarm1变量被设置为true而不是false。

我是新的javascript(大约一个星期),不知道为什么它这样做。如有任何帮助,不胜感激

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;
}

有更多的代码,但我没有添加它,所以我可以使帖子更短,但如果你需要更多的上下文然后问请:)

我想当你绑定bananaClick的点击事件时,你可能会做两次。

例如:

document.addEventListener('click', () => console.log('c'), )
document.addEventListener('click', () => console.log('c'), )

每次点击c都会打印两次。

如果一次只有一个计时器,你可以每次清除它它叫做.

let timer;
let a = () => {

clearInterval(timer)
timer = setInterval(  ()=> {
console.log('bananas')

}, 2000)
}
a()
a()
a()      // only one timer will be active

相关内容

  • 没有找到相关文章

最新更新