0

我需要清除超时,但我不知道如何。我不确定要从 window 对象传递什么 clearTimeout 方法...有什么提示吗?

                for (var k = 0; k <= arr2.length; k++) {

                  (function (k) {
                      window.setTimeout(function () {

                          //do something

                      }, 6000 * k);
                  })(k);

               }
4

2 回答 2

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
于 2012-05-28T01:02:40.380 回答
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)对一次运行的超时过多反应不佳。

于 2012-05-28T00:59:56.040 回答