由于问题的简单性,我想这可能是重复的,但我找不到任何答案。
如果某个条件为真,我将在 foror 循环中设置超时函数。因为我不想在循环中声明超时,所以我编写了一个 setTimeout 函数将其设置在外部。我只想使用一个计时器,如果它已经在运行,它会被重置,否则应该第一次设置计时器。我的问题是,尽管我使用的是 clearTimeout(),但该函数设置了多个计时器。
我的代码:
var timeout_id;
var things = [true, true, false, true, true];
var setTimer = function(timer_id, duration) {
console.log("timer_id: ", timer_id);
// clear timeout of the given Id
clearTimeout(timer_id);
timer_id = setTimeout(function() {
// reset flag
console.log("Timer timed out");
}, duration);
console.log("timer_id: ", timer_id);
};
for (var i = things.length - 1; i >= 0; i--) {
if (things[i]) {
setTimer(timeout_id, 900);
console.log("Timer set because value of : " + i + " = ", things[i]);
}
}
我在控制台中得到的是:
timer_id: undefined
timer_id: 1
Timer set because value of : 4 = true
timer_id: undefined
timer_id: 2
Timer set because value of : 3 = true
timer_id: undefined
timer_id: 3
Timer set because value of : 1 = true
timer_id: undefined
timer_id: 4
Timer set because value of : 0 = true
timer timed out
timer timed out
timer timed out
timer timed out
我不明白为什么我的 timer_id 每次都增加。
我正在传递 id 并重置它的计时器。之后,我在同一个 ID 上设置了一个计时器,不是吗?是否没有给出对 var timeout_id 的引用并从 setTimer 函数内部对其进行更改?
谢谢您的帮助。