如何清除此超时:
var timeout = setTimeout(function() {
window.setTimeout(arguments.callee, 1000);
}, 1000)
clearTimeout(timeout)
没有工作..
答案 0 :(得分:3)
您将timeout
设置为第一次呼叫setTimeout
的结果,但不是以下任何呼叫。你可能想要
var timeout;
timeout = setTimeout(function() {
timeout = window.setTimeout(arguments.callee, 1000);
}, 10);
clearTimeout(timeout);
但这可以更好地写成
function iter() {
timeout = setTimeout(iter, 1000);
}
答案 1 :(得分:1)
将超时存储在超出递归范围的变量中。由于IE的限制,也避免使用arguments.callee。您可以查看工作小提琴here。
var timeout = null;
function updateTimeout() {
timeout = setTimeout(updateTimeout, 1000)
console.log('hoi')
}
// Start the timeout
updateTimeout();
答案 2 :(得分:0)
每次设置新超时时,都需要重新分配timeout
。并摆脱arguments.callee
。
试试这个工作示例:
<button onclick="myFunction()">Try it</button>
<button onclick="myStopFunction()">Stop the alert</button>
<script>
var timeout;
function myFunction() {
timeout = setTimeout(function timerHandler() {
timeout = setTimeout(timerHandler, 1000);
}, 1000)
}
function myStopFunction() {
clearTimeout(timeout);
}
</script>