我需要清除超时,我无法弄清楚如何。我不确定从window对象传递clearTimeout方法的内容...任何提示?
for (var k = 0; k <= arr2.length; k++) {
(function (k) {
window.setTimeout(function () {
//do something
}, 6000 * k);
})(k);
}
答案 0 :(得分:3)
由于您正在创建arr2.length
个定时器,如果您需要“杀死”特定定时器,则需要一组引用。
//create a reference storage
var timerRefs = [];
for (var k = 0; k <= arr2.length; k++) {
(function (k) {
//reference the timeout to a variable
var ref = window.setTimeout(function () {
//do something
}, 6000 * k);
//store that reference in the array
timerRefs.push(ref);
})(k);
}
清除特定的一个,执行:
clearTimeout(timerRefs[N]); //where N is the index of that timer
答案 1 :(得分:2)
如果要取消超时,必须捕获其返回值。
var myTimer = setTimeout(...);
然后,只需将该值传递给函数:
clearTimeout(myTimer);
就个人而言,我会改写:
(function(inp) {
var k = 0, l = inp.length, timer;
timer = setInterval(function() {
// do something with inp[k];
k++;
if( k > l) clearInterval(timer);
},6000);
})(arr2);
某些浏览器(特别是Firefox)对同时运行太多超时的反应很差。