清除特定超时

时间:2017-06-08 13:49:09

标签: javascript

如何清除此超时:

var timeout = setTimeout(function() {
    window.setTimeout(arguments.callee, 1000);
}, 1000)

clearTimeout(timeout)没有工作..

3 个答案:

答案 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>