将计时器ID放入其功能中

Placing timer ID into its function

本文关键字:功能 计时器 ID      更新时间:2023-09-26

我想把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全局化,并且能够通过其回调函数中的某些条件来终止计时器。

如果你把setTimeout调用放在它自己的函数中,你的代码就可以正常工作,如下所示:

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

这是一把小提琴

delay_timeout变量可用于回调,因为它位于同一机柜中。

只要你不在同一个上下文中,并且在setTimeout触发回调之前重新运行它,你就可以了。所以这不起作用:

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

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