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

时间:2012-07-09 10:23:31

标签: javascript firefox setinterval

这是window.setInterval

的Mozilla Developer Network示例
var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

(可在此处找到:https://developer.mozilla.org/en/DOM/window.setInterval

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

地图中的每个功能都将以给定的间隔继续执行。如果您使用与地图中的项目对应的ID调用clearInterval,它将删除该项目,该功能将停止执行。

答案 1 :(得分:1)

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