Javascript 是否清除启动范围之外的超时?
我找不到在调用函数之外停止间隔计时器的方法。我在下面的代码中遗漏了什么?我是否需要专门声明一个名为timer的全局变量 变量计时器;//全球计时器? 函数updateStatsi{ i++;//增量 alertIm正在运行!增量为+i; 检查条件I; 定时器=设置间隔功能{ 更新STATSI; }, 5000; } 函数检查条件I{ ifi==2{ 满足警报条件,重置计时器!; 间隔定时器; } } var i=0;Javascript 是否清除启动范围之外的超时?,javascript,timer,Javascript,Timer,我找不到在调用函数之外停止间隔计时器的方法。我在下面的代码中遗漏了什么?我是否需要专门声明一个名为timer的全局变量 变量计时器;//全球计时器? 函数updateStatsi{ i++;//增量 alertIm正在运行!增量为+i; 检查条件I; 定时器=设置间隔功能{ 更新STATSI; }, 5000; } 函数检查条件I{ ifi==2{ 满足警报条件,重置计时器!; 间隔定时器; } } var i=0; 更新STATSI 仅创建计时器一次: 变量计时器;//全球计时器? 函数更
更新STATSI 仅创建计时器一次: 变量计时器;//全球计时器? 函数更新状态{ i++;//增量 alertIm正在运行!增量为+i; 检查条件I; } 函数检查条件I{ ifi==2{ 满足警报条件,重置计时器!; 间隔定时器; } } var i=0;
定时器=SetIntervalueUpdateStats,5000 它确实起作用,而且你确实清除了超时,问题是你每次调用updateStats都会创建多个计时器,每次都会覆盖计时器,失去其他计时器的句柄。为什么每次调用创建新计时器的函数时,都要添加很多计时器 我猜你真的在尝试这样做,间隔只创建一次,而不是每次迭代
var timer;
function updateStats(i) {
function inner() {
i++;
alert("Im running! increment is " + i);
checkCondition(i);
}
timer = setInterval(inner, 5000);
inner();
}
function checkCondition(i) {
if(i == 2) {
alert("condition met, resetting timer!");
clearInterval(timer);
}
}
var i = 0;
updateStats(i);
每次运行updateStats时,都会创建一个间隔计时器
在该时间间隔内运行updateStats
因此,当代码第一次运行时,有一个内部计时器正在运行
5秒后你有2个。10秒后,每个间隔开始一个新的间隔,因此有4个,以此类推
它们都共享一个计时器变量,所以它的值将是您设置的最后一个时间间隔,而这是您唯一停止的时间间隔。当所有其他的计时器都在运行时,将您运行的间隔计时器的数量增加一倍,每5秒一次
您需要认真重构代码。您正在清除计时器,然后立即设置一个全新的计时器。setInterval也只需要调用一次。此时,每次调用循环时,都会生成另一个计时器实例,而您只能清除最后一个实例 看看这个:
var timer,i=0;
timer = setInterval(function() {
updateStats();
}, 5000);
function updateStats() {
i++; // increment
alert("Im running! increment is " + i);
checkCondition();
}
function checkCondition() {
if(i == 2) {
alert("condition met, resetting timer!");
clearInterval(timer);
}
}
让我大大简化您的代码: 环0,1000; 函数循环计数,延迟{ alertI正在运行。计数为+++count+。; 如果满足计数===2警报条件,则停止循环。; else setTimeoutloop,delay,count,delay; } 函数窗口,设置超时,设置间隔{ window.setTimeout=fixsetTimeout; window.setInterval=fixsetInterval; 函数固定计时器{ 返回函数回调,间隔{ 变量长度=arguments.length; 开关长度{ 案例0: 案例1: 抛出至少两个参数的新错误; 案例2: 返回时间回调,间隔; 违约: var i=2; var args=新阵列长度-2; 而i