gpt4 book ai didi

javascript - 无法使用 setTimeout 或 RAF 实现的 setInterval 用途?

转载 作者:行者123 更新时间:2023-11-30 00:07:33 24 4
gpt4 key购买 nike

我正在努力想出网络应用程序开发中需要使用 setInterval 的用例。

setInterval 的“危险”在于,如果回调在分配的时间间隔内未完成,它只是将回调排队。

此外,setInterval 的行为可以通过 setTimeoutrequestAnimationFrame 来模拟,而不会出现这种“危险”。

鉴于此,有人可以为我提供一个用例,其中 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) {}
}

据我所知,setInterval 不是很有用,如果你想均匀分布间隔回调调用(见上文),但如果你想要一种方便的方式在一个时期,分布在尽可能接近他们应该运行的时间范围内。这似乎是一个相当狭窄的用例。

我确定我遗漏了什么。

编辑 2:

这基本上是 JS 可以实现的时钟的最佳近似值,所以我猜 setInterval 是“时钟计时器”。据推测,这在需要简单时钟的应用程序中很有用。

最佳答案

setTnterval 适用的用例是您希望在准确的时间执行函数。 setIntervalsetTimeout 有字幕差异。 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);
}

关于javascript - 无法使用 setTimeout 或 RAF 实现的 setInterval 用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37930813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com