JavaScript setInterval第二次调用后不持续执行如何解决

问题
现有代码运行时仅输出1,setInterval在第二次触发后不再继续执行,需要修复该问题。
原有尝试代码
let intervalTimer = null; function startTimer(callback, interval) { // Write the code that goes here intervalTimer = setInterval(() => { let obj = {number:0}; if(callback(obj)) { } else { } },interval); } function callback(obj) { obj.number++ console.log(obj.number); return obj.number < 5; }
问题根源
两个核心错误导致逻辑不符合预期:
- 计数对象
obj定义在setInterval的回调内部,每次定时器触发都会重新创建一个number初始值为0的全新对象,计数根本无法累计,每次传给回调的都是重置后的初始对象 - 没有处理回调返回
false的分支逻辑,达到终止条件后不会自动清除定时器,会造成无效执行。
修复后完整代码
let intervalTimer = null; function startTimer(callback, interval) { // 计数对象只初始化一次,放在定时器回调外层 const countObj = { number: 0 }; intervalTimer = setInterval(() => { const keepRunning = callback(countObj); // 回调返回false时终止定时器 if (!keepRunning) { clearInterval(intervalTimer); intervalTimer = null; } }, interval); } function callback(obj) { obj.number++ console.log(obj.number); return obj.number < 5; } // 测试:间隔1秒执行 startTimer(callback, 1000);
运行效果
修复后会按设定的时间间隔依次打印1、2、3、4、5,打印完5后自动停止定时器,不会继续执行。
内容的提问来源于stack exchange,提问作者someusername12
相关产品推荐
相关产品推荐

