我应该在调用setInterval()之前调用clearInterval()吗?
Should I call clearInterval() before calling setInterval()
在代码中的几个地方,我们做了这样的操作:
eventGrabber.poller = setInterval(grabEvents, 50);
每50毫秒调用一次grabEvents方法。然而,由于我们在不止一个地方这样做,我想知道grabEvents是否比每50毫秒更频繁地被调用。换句话说,如果我这样做:
eventGrabber.poller = setInterval(grabEvents, 50);
//wait 25 ms here
eventGrabber.poller = setInterval(grabEvents, 50);
现在会有两个计时器运行调用grabEvents每25毫秒(其中一个我们永远不能停止,因为我们失去了它的句柄)?
把我们所有的调用都改成这样能解决这个问题吗(如果这真的是个问题的话):
//if there is a timer running clear it out first
clearInterval(eventGrabber.poller); //if poller is null does it matter??
//now start the timer
eventGrabber.poller = setInterval(grabEvents, 50);
是的,在那个点上会有两个间隔在运行。然而,"句柄"实际上只是一个整数。使用clearInterval需要一个数字作为参数,但是,如果传递给它NaN, undefined, null等,它将默默地失败并继续前进。
我建议对民意调查者进行筛选,并按照你问题末尾的建议清除它。这可能是最佳实践。
根据你页面上有多少计时器,你可以把它们全部清除。但是,这可能并不理想,这取决于是否存在对页面操作至关重要的活动间隔。
var maxInterval = setInterval(function(){},10000);
for(var i = 0; i <= maxInterval; i++) clearInterval(i);
是的,你会有多个间隔运行,如果你封装它并做这样的事情:
function poller(callback, ms) {
var interval
return {
start: function() {
if (!interval) {
interval = setInterval(callback, ms)
}
},
stop: function() {
clearInterval(interval)
}
}
}
eventGrabber.poller = poller(grabEvents, 50)
eventGrabber.poller.start()
// ......
eventGrabber.poller.start()
这样可以确保它不会运行多次:)
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 是否可以对超出范围的 setInterval 变量调用 clearInterval 方法
- 阻止用户手动调用clearInterval
- 使用 jQuery .promise() 调用 clearInterval()
- 如何从一个函数调用 clearInterval() 方法以停止另一个函数中的 setInterval() 方法
- 在嵌套调用中使用 clearInterval
- 即使调用了clearInterval,interval也会继续激发
- 在clearInterval()之后仍在调用setInterval.()
- 我应该在调用setInterval()之前调用clearInterval()吗?
- clearInterval()可以在setInterval()中调用吗?
- 如何在调用clearInterval后重新启用setInterval ?
- clearInterval变量名不断被调用,但出现时没有定义
- JavaScript -在浏览器上,标签切换间隔不会通过clearInterval &窗口.聚焦/模糊被调用两次