我不太确定这个问题的机制,但是我试图将单个setTimeout设置为一个变量ID,我可以使用clearartimeout轻松取消该变量ID。但是,如果setTimeout在clearartimeout之前被触发两次,事情就会变得很奇怪。
的例子:http://www.w3schools.com/js/tryit.asp?filename=tryjs_settimeout2
点击"Try It"两次,再点击"Stop the Alert"两次,设置超时的功能仍然会被调用。同样,我不确定为什么Try It会触发函数两次,考虑到事件被保存到一个正在被覆盖的变量。
你知道这是怎么回事吗?
正如MCL所解释的那样,您将失去对先前超时的引用,因为新的赋值将覆盖它。
你能做的就是把超时放到一个数组中:
var myTimer = [];
function myFunction () {
myTimer.push(setTimeout(function(){alert("Hello")},3000));
}
function myStopFunction () {
clearTimeout(myTimer.pop());
}
这样就可以取消上次点击Stop the alert
按钮时设置的超时时间。