Javascript 在MDN setInterval示例中,var intervalID是如何工作的?

Javascript 在MDN setInterval示例中,var intervalID是如何工作的?,javascript,firefox,setinterval,Javascript,Firefox,Setinterval,这是window.setInterval的Mozilla开发者网络示例 var intervalID = window.setInterval(func, delay[, param1, param2, ...]); var intervalID = window.setInterval(code, delay); (可在此处找到:) 我更习惯于编译这些类型的算法的Java编程,所以我的问题是: intervalID是如何工作的?似乎有某种递归函数在幕后进行,但这是一个完整的猜测-它是如何构造

这是window.setInterval的Mozilla开发者网络示例

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);
(可在此处找到:)

我更习惯于编译这些类型的算法的Java编程,所以我的问题是:


intervalID是如何工作的?似乎有某种递归函数在幕后进行,但这是一个完整的猜测-它是如何构造的,并且该结构(可能相当大)是否存储为intervalID,等待
clearInterval(intervalID)

intervalID
只是由
setInterval
函数返回的一个数字,用于标识正在进行的间隔

想象一下,好像有一个数字映射到一个函数和一个区间的元组。这可能不是它的实际实现方式,但我认为它足以作为它如何工作的心智模型

11: [function () { ... }, 500],
27: [function () { ... }, 230],
875: [function () { ... }, 650]
...

映射中的每个函数将在给定的时间间隔内继续执行。如果您使用映射中某个项对应的id调用
clearInterval
,它将删除该项,并且函数将停止执行。

我假设您想知道它在Firefox浏览器中的工作方式(每个浏览器都有自己的相同方法实现)。可以在中找到实现,它实际上非常简单。每个窗口都有一个未完成超时的列表,当您调用
window.setInterval()
时,将创建一个新的超时并将其添加到该列表中。timeout结构包含对的引用,该引用将在需要调用回调时通知窗口。并且它有一个
mppublicid
成员,它只是一个数字-它会随着创建的每个新超时而递增,并由
setInterval()
返回。当您调用
clearInterval()
时,它将在列表中查找具有匹配ID的超时并将其删除。

在您发送的链接上对其进行了详细解释。这里没有递归,只是重复调用同一个函数之间的间隔,
intervalID
只是一个不透明的标识符,允许您在特定计时器上调用
clearInterval
。这只是一个数字。哈哈,好吧,就这么简单!谢谢你们,太好了!可以说,她希望得到“丰满”的回应