我正在努力想到需要使用setInterval
的Web应用程序开发中的用例。
"危险" setInterval
只要在分配的时间间隔内没有完成回调就会排队。
此外,setInterval
的行为可以使用setTimeout
或requestAnimationFrame
进行模拟,但不会出现此问题"危险"。
鉴于此,有人可以向我提供一个用例setInterval
是优越/更合适的选项吗?
修改
以为我记下了我的发现。
setInterval
是一种以偶数间隔运行的简单方法。间隔将主要非常准确,但如果事件循环被阻止,那么它们可能完全不准确。
var x = 0;
setInterval(function() {
waitBlocking(5000);
document.write(x++);
},100);
function waitBlocking(ms) {
var start = Date.now();
while((Date.now() - start) < ms) {}
}
&#13;
据我所知,如果你想要均匀扩展的间隔回调调用(见上文),setInterval
是有用的,但如果你想要一个方便的方法在一个时期内有一个特定数量的回调调用,在时间范围内尽可能接近它们应该运行的时间。这似乎是一个相当狭窄的用例。
我确定我错过了什么。
编辑2:
这基本上是JS可以实现的时钟的最佳近似值,所以我猜setInterval
是&#34;时钟计时器&#34;。据推测,这在需要简单时钟的应用中很有用。
答案 0 :(得分:1)
适合setTnterval
的用例是您希望在准确时间执行函数的时间。 setInterval
和setTimeout
有字幕差异。 setInterval
从事件setInterval
解雇之后的延迟开始后执行该函数。
setInterval
也不是隐居的,所以不用担心关闭和内存泄漏。但是,可以找到更多详细信息here
以下是典型setInterval
函数的代码
var intervalID = window.setInterval(myCallback, 500);
function myCallback() {
// Your code here
}
如果要使用setTimeout实现相同的功能,则必须创建一个可以创建闭包的递归,然后出现内存泄漏问题,如下所示。
function startTimer() {
var count = [1,2,3,4,5,6,7,8,9,0]
setTimeout(function() {
//do some stuff
count.push(100);//you have just create a closure
//and all the problems that is associated with it
startTimer();//this is where the recursion happens
}, 1000);
}