0

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

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)

4

2 回答 2

1

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

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

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

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

于 2012-07-09T10:57:37.800 回答
1

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

于 2012-07-09T10:58:14.263 回答