JavaScript中如何让两个独立条件的if语句同时执行
问题排查
你写的农场添加判断逻辑放在了全局作用域,这段代码仅会在页面首次加载时执行1次。页面初始化阶段bananaCount初始值为0,不可能满足大于10000的触发条件;后续点击香蕉修改计数时,全局作用域的代码不会重新执行,自然永远触发不了加农场的逻辑。
另外你现有代码还有两个隐藏bug:
- 金香蕉升级逻辑没有加触发标记,只要计数超过10000,每次点击都会重复修改UI、重复执行
countByTwo(3),会导致点击增量异常 addFarm函数每次调用都会新建一个循环计时器,后续如果新增更多农场,会出现多个计时器同时叠加计数的问题,产出数值会错乱
修复方案
把农场触发判断移到bananaClick函数内部,在每次点击更新完香蕉计数后统一做条件检查,两个独立逻辑各自绑定标记位保证只触发一次,同时修复上述隐藏bug:
var addFarm1 = false; var isGoldenUnlocked = false; // 金香蕉升级触发标记 var farmTimer = null; // 存储农场计时器ID,避免重复创建 // 注意提前初始化你用到的全局变量,避免未定义报错 var bananaCount = 0; var farmCount = 0; var farmIncrement = 0; function countByTwo(num1) { for (let i = 0; i < num1; i++) { bananaCount += 2; } return bananaCount; } function addFarm(farmAdd) { farmCount = farmCount + farmAdd; farmCountText.textContent = farmCount; farmIncrementText.classList.remove('hidden'); farmIncrement = farmCount * 5; farmIncrementText.textContent = '+' + farmIncrement; // 新增农场/升级农场产出前先清除旧计时器,避免多计时器叠加 if (farmTimer) clearInterval(farmTimer); farmTimer = setInterval(function() { bananaCount += farmIncrement; bananaCountText.textContent = bananaCount; }, 1000); } function bananaClick() { // 金香蕉解锁后每次点击固定加15,未解锁加1,不需要重复调用countByTwo bananaCount += isGoldenUnlocked ? 15 : 1; // 金香蕉升级触发判断 if (bananaCount >= 10000 && !isGoldenUnlocked) { bananaClicked.textContent = 'Golden Banana Bunch (+15)'; banana.src = 'images/banana6.png'; isGoldenUnlocked = true; } // 免费农场奖励触发判断,移到点击函数内每次更新计数后检查 if (bananaCount >= 10000 && !addFarm1) { addFarm(1); addFarm1 = true; } bananaCountText.textContent = bananaCount; }
修复说明
- 两个触发逻辑现在都在点击流程内,计数达到阈值后会依次执行,不会出现某一个不触发的问题
- 两个逻辑独立绑定标记位,触发一次后就会锁定,不会出现后续点击重复执行的问题
- 把原逻辑里
bananaCount > 10000改成>= 10000,刚好攒到10000的时候就能触发升级,不需要多攒1个 - 优化了点击增量逻辑,避免原代码每次点击重复调用
countByTwo导致的数值异常 - 修复了农场计时器重复创建的问题,后续新增更多农场升级时,直接调用
addFarm传入新增数量即可自动更新每秒产出,不会出现计数错乱
内容的提问来源于stack exchange,提问作者kvnza
相关产品推荐
相关产品推荐

