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

使用JavaScript setInterval做定时器多次点击Set按钮计时加速问题求解

问题产生原因

每次点击Set按钮都会触发一次setInterval调用,生成一个独立的定时器实例。你虽然把新定时器的ID赋值给了interval变量,但之前已经启动的定时器并没有被清除,依然在后台正常运行。点击多少次Set就会有多少个定时器同时工作,每个定时器每秒都会给div的数值加1,最终就会出现数值增速随点击次数变快的问题。

规避方案(无需合并按钮)

两种方案选一种即可:

方案1:启动前先清除已有定时器

每次调用sets函数时,先清除之前可能存在的定时器,确保同一时间永远只有一个定时器运行,修改后的JS代码如下:

var interval;
function sets(){
  // 启动新定时器前先清掉旧的,即使没有旧定时器也不会报错
  clearInterval(interval);
  interval = setInterval(function(){
   document.querySelector('div').textContent = 
    parseFloat(document.querySelector('div').textContent)+1; 
  },1000);
 };
function del(){
  window.clearInterval(interval);
  document.querySelector('div').textContent = 0;
};

这个方案不需要修改HTML代码,逻辑简单,重复点击Set也只会保留最新的一个定时器。

方案2:加运行状态锁防止重复启动

通过变量记录定时器运行状态,已经在运行的情况下点击Set直接不执行新定时器创建逻辑:

var interval;
var timerRunning = false; // 定时器运行状态标记
function sets(){
  // 已经在运行就直接返回,不创建新定时器
  if(timerRunning) return;
  interval = setInterval(function(){
   document.querySelector('div').textContent = 
    parseFloat(document.querySelector('div').textContent)+1; 
  },1000);
  timerRunning = true;
 };
function del(){
  window.clearInterval(interval);
  timerRunning = false; // 清除定时器时重置状态
  document.querySelector('div').textContent = 0;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:48:03