将计时器ID放入其功能中

时间:2015-10-28 16:38:56

标签: javascript closures

我想将setInterval()返回的计时器ID放入其函数中:

delay_timeout = setInterval(function () {
    test_delay(data['time'], delay_timeout);
}, 1000);

有可能吗?在我看来, delay_timeout 此时没有值......

我不想全局保存 delay_timeout ,以便稍后在计时器的功能中使用它来停止它。几个计时器可能同时工作。

更新:

代码不是全球性的,它位于:

socket.on('test_delay', function (data) {
    ...
});

关键是不要使 delay_timeout 全局,并且能够通过其回调函数中的某些条件终止计时器。

1 个答案:

答案 0 :(得分:1)

如果您将setTimeout调用放入其自己的函数中,那么您的代码可以正常工作:

function setTimer(){
    var timeId = setTimeout(function(){ console.log(timeId); }, 1);
}

for(var i = 0; i < 10; i ++){
    setTimer();
}

here's a fiddle

delay_timeout变量可用于您的回调,因为它位于同一个机箱中。

只要您不在同一个环境中并在触发回调之前重新运行setTimeout,您就可以了。所以这不会起作用:

var timeId;

for(var i = 0; i < 10; i ++){
     timeId = setTimeout(function(){ console.log(timeId); }, 1);
}

(见小提琴的后半部分......)