javascript - 将定时器 ID 放入其函数中

标签 javascript closures

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

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

这可能吗?在我看来,delay_timeout 目前没有值(value)......

我不想全局保存 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();
}

here's a fiddle

delay_timeout 变量可供您的回调使用,因为它位于同一外壳中。

只要您不在同一上下文中,并在触发回调之前重新运行 setTimeout 就可以了。所以这行不通:

var timeId;

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

(参见 fiddle 的后半部分...)

关于javascript - 将定时器 ID 放入其函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33396668/

相关文章:

javascript - 使用 jquery 为每个可折叠面板组动态生成 id

javascript - 使用 Javascript 播放和暂停图像

javascript - 当元素位于视口(viewport)中时开始视差

python - 如何模拟嵌套函数?

javascript - MarkLogic 8 Ingestion Job 在 JavaScript 中对集合进行非规范化

swift - 在异步网络请求中捕获 self weak 或 unowned

rust - 将 '&self' 方法中的闭包添加到结构中的属性

Javascript函数问题

javascript - JavaScript 函数图

javascript - 如何在成功 block 之外使用ajax函数的值