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

如何暴露startTempMonit返回的Interval以在点击停止按钮时清除定时器

原代码失效原因
  • const 声明的变量必须在声明时完成初始化,且不允许后续重新赋值,你在ready作用域内声明const inter;本身就属于语法错误,后续启动按钮点击事件中给inter赋值的操作会直接失败,因此停止按钮获取到的inter始终是未定义状态。
  • 你尝试的外层作用域声明const inter方案同样受const不可二次赋值的特性限制,无法正常存储定时器ID,且确实会污染全局命名空间。
解决方案

以下两种方案都不会污染全局作用域,可按需选择:

方案1:将定时器ID存储在DOM元素的data属性上(无需额外声明变量)

直接把定时器ID存在启动按钮的内置数据缓存中,不需要额外声明任何变量,完全避免作用域污染:

$(function () {
    $("#buttonStartTemp").click(function () {
        // 启动前先清除已存在的定时器,避免重复启动生成多个定时器
        const existInterval = $(this).data('temp-monit-interval');
        if (existInterval) clearInterval(existInterval);
        // 存储新的定时器ID到启动按钮的data属性中
        $(this).data('temp-monit-interval', startTempMonit(onFetchCallback.store));
    });

    $("#buttonStopTemp").click(function () {
        const inter = $("#buttonStartTemp").data('temp-monit-interval');
        if (inter) {
            clearInterval(inter);
            // 清除已失效的ID缓存
            $("#buttonStartTemp").removeData('temp-monit-interval');
        }
    });
});

function startTempMonit(callback) {
    var time = 0;
    const Interval = setInterval(function () {
        // 原有定时器业务逻辑
    }, 500);
    return Interval;
}

方案2:在ready闭包内用let声明变量(仅当前作用域有效,不污染全局)

如果你可以接受在jQuery ready的闭包范围内声明变量,只需要把原来的const改成let即可,该变量仅在当前ready函数内可访问,不会泄露到全局作用域:

$(function () {
    // 仅在当前ready函数作用域内有效,不会污染全局
    let inter = null;
    $("#buttonStartTemp").click(function () {
        // 避免重复启动生成多个定时器
        if (inter) clearInterval(inter);
        inter = startTempMonit(onFetchCallback.store);
    });

    $("#buttonStopTemp").click(function () {
        if (inter) {
            clearInterval(inter);
            inter = null;
        }
    });
});

function startTempMonit(callback) {
    var time = 0;
    const Interval = setInterval(function () {
        // 原有定时器业务逻辑
    }, 500);
    return Interval;
}

内容的提问来源于stack exchange,提问作者rustyBucketBay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:57:02