You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 05:21:37