所以,问题是clearTimeout在大多数时候都能正常工作,但有时却不能。首先,我调用函数,在函数结束时,有一个setTimeout来再次调用函数并开始循环,还有一个按钮来清除超时,正如我所说,大部分时间都能正常工作。代码是这样的。反映在控制台的计数器让我直观地看到函数何时运行,何时停止。
EDIT: 我已经有了这样的clearTimeout(foo_timeout),我写错了,抱歉。
var cons = 0
function foo(
//do some asyncajaxstuff
cons = cons++
console.log(cons)
foo_timeout = setTimeout(foo, 1200);
)
foo()
$("#unsettimeout").click(function(){
clearTimeout(foo_timeout)
})
好吧,你的例子清楚地表明 clearTimeout
将永远不会工作。你应该把 setTimeout
.
var cons = 0;
var foo_timeout = null;
function foo() {
cons = cons + 1;
console.log(cons);
foo_timeout = setTimeout(foo, 1200);
}
foo();
$("#unsettimeout").click(function() {
clearTimeout(foo_timeout);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="unsettimeout">Unset Timeout</button>