如本例中那样停止setTimout?
var i = 1;
var timerId = setTimeout(function tick() {
if (i == 5) clearTimeout(timerId);
i++;
console.log("Tick");
timerId = setTimeout(tick, 2000);
}, 2000);

我知道您可以更改此代码然后一切都会正常工作,但我想了解为什么第一个示例不起作用。
var i = 1;
var timerId = setTimeout(function tick() {
console.log('Tick');
if (i < 5) setTimeout(tick, 2000);
i++;
}, 2000);
&#13;
答案 0 :(得分:4)
第一个代码段继续循环,因为:
您应该使用setInterval()
而不是setTimeout()
,因为间隔会在指定的频率下无限期地重复,而超时只会在指定的时间过后执行一次。
答案 1 :(得分:3)
第一个例子不起作用,因为无论i的值如何,你总是设置超时。如果i等于5
,则添加一个return语句var i = 1;
var timerId = setTimeout(function tick() {
if (i == 5) {
return;
}
i++;
console.log("Tick");
timerId = setTimeout(tick, 2000);
}, 2000);
答案 2 :(得分:0)
定时器到期后clearTimeout可以,但没有必要。
正因为如此,你的第二个代码片段优于第一个代码片段。
并且在您的第一个代码段中,即使满足if条件,也始终设置超时,并且您想要返回,
我将重新编写如下所示的功能
var i = 1;
function tick() {
if (i == 5) {
return;
}
i++;
console.log("Tick");
setTimeout(tick, 2000);
}
setTimeout(tick, 2000);
或使用区间为
var i = 1;
function tick() {
if (i == 5) {
clearInterval(timerId);
return;
}
i++;
console.log("Tick");
}
var timerId = setInterval(tick, 2000);