Sea*_*son 9 javascript settimeout
刚在我们的应用程序中找到了这段代码片段.我想知道第一行是否是多余的 - 如果它被立即覆盖,是否需要在变量上调用clearTimeout?还是有一些我应该注意的情况?
function Countdown() {
clearTimeout(sessionTimeoutHandle);
sessionTimeoutHandle = setTimeout(function () { countdownHandler() }, MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)
我的预感是"是的,你需要调用clearTimeout"因为我无法想象为什么只有将timeout变量设置为null才能存在clearTimeout方法.
我想更好的问题是:
var timeoutHandler = setTimeout(countdownHandler, MILLISECONDS);
timeoutHandler = setTimeout(countdownHandler, MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
我现在有两个功能等待大约MILLISECONDS,或只有一个吗?
小智 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);
}Run Code Online (Sandbox Code Playgroud)
我希望这是一些帮助.
小智 6
不,如果您确实需要清除它,您只需要调用它.
如果这是使用该变量的唯一代码,则应该没有必要.
仅供参考,看起来您可以缩短代码...
function Countdown() {
clearTimeout(sessionTimeoutHandle);
sessionTimeoutHandle = setTimeout(countdownHandler, MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)
匿名函数没有获得任何结果.
| 归档时间: |
|
| 查看次数: |
6611 次 |
| 最近记录: |