在我们的应用程序中找到了这段代码片段。我想知道第一行是否是多余的 - 如果它被立即覆盖,是否需要在变量上调用clearTimeout?或者是否有一些我应该注意的情况?
function Countdown() {
clearTimeout(sessionTimeoutHandle);
sessionTimeoutHandle = setTimeout(function () { countdownHandler() }, MILLISECONDS);
}
我的预感是"是的,你需要打电话给clearTimeout"因为我不能想到为什么只有将timeout变量设置为null才能存在clearTimeout方法。
我想更好的问题是:
var timeoutHandler = setTimeout(countdownHandler, MILLISECONDS);
timeoutHandler = setTimeout(countdownHandler, MILLISECONDS);
我现在有两个功能等待大约MILLISECONDS,或只有一个吗?
答案 0 :(得分:15)
您对setTimeout的调用会返回一个整数来标识它,以便在您想要清除它时引用它。因此,覆盖变量并不会清除超时,它只会覆盖对其id的引用。如果您覆盖引用,则无法再清除之前的引用: - (
你将使用clearTimeout,因为Niko说 - 停止回击被解雇。
插图:
var t = setTimeout(ch, 1000, "first timeout");
t = setTimeout(ch, 1500, "second timeout");
clearTimeout(t); // this will only clear the second timeout
t = setTimeout(ch, 2000, "third timeout");
function ch(s){
console.log(s);
}
我希望这是一些帮助。
答案 1 :(得分:6)
不,如果您确实需要清除它,您只需要调用它。
如果这是使用该变量的唯一代码,那么就没有必要。
仅供参考,看起来您可以稍微缩短代码......
function Countdown() {
clearTimeout(sessionTimeoutHandle);
sessionTimeoutHandle = setTimeout(countdownHandler, MILLISECONDS);
}
使用匿名函数没有任何结果。
答案 2 :(得分:3)
我想不出为什么clearTimeout方法会存在
clearTimeout
存在于取消现有计时器,即擦除计时器并阻止调用其回调函数。
答案 3 :(得分:1)
clearTimeout用于取消超时,而不是用于释放任何内存或类似内容。如果你想要停止计时器,请调用clearTimeout - 如果你想要它完成或者它已经完成,则没有必要这样做。