Javascript中如何解决clearInterval无法终止计时器引发无限循环的问题
问题排查&修复方案
代码存在的3个核心问题
clearInterval方法必须传入对应计时器的唯一ID作为参数才能生效,你调用时没有传参,自然无法终止任何正在运行的计时器- 计时器创建逻辑混乱:你在
randomGame函数内部调用setInterval,如果启用最上方注释的全局计时器代码,会每秒新增一个独立的计时器,多个计时器并行运行的情况下永远无法全部正常终止 - 业务逻辑和需求不符:当前代码是随机数小于0.75时累计计数打印,大于0.75时无打印直接尝试清计时器,完全和你要求的「大于0.75打印数值、统计符合要求的总次数」逻辑相反
修复后的可运行代码
// 统计符合要求的总次数 let qualifiedCounter = 0 // 保存计时器ID,后续用来清除计时器 const timerId = setInterval(randomGame, 1000) function randomGame(){ const randomNum = Math.random() if (randomNum > 0.75) { // 符合要求:打印数值、计数+1,再终止计时器 console.log('符合要求的随机数:', randomNum) qualifiedCounter++ console.log('符合要求的总次数:', qualifiedCounter) clearInterval(timerId) } else { console.log('当前随机数不符合要求:', randomNum) } }
补充说明
如果你不需要在第一次出现符合要求的数值时就终止程序,只需要持续累计符合要求的次数,删掉clearInterval(timerId)这一行即可。
内容的提问来源于stack exchange,提问作者r3c1n
相关产品推荐
相关产品推荐

