这是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)
?
答案 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的超时并将其删除。