1.
setInterval
和setTimeout
(用于清除计时器的)返回的值是如何计算的?
2. 在运行时,这两个函数是否可能返回相同的值?
例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a 和 b 是否可能具有相同的值?第一个问题更多是我想知道的,但第二个问题更重要。
setInterval
和setTimeout
(用于清除计时器的)返回的值是如何计算的?
2. 在运行时,这两个函数是否可能返回相同的值?
例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a 和 b 是否可能具有相同的值?返回可用于取消定时器的值。 因此,它们似乎不会返回相同的值(除非它们正在重复使用值并且其中一个定时器已被取消)。
Mozilla称它为DOM 0级,但不是规范的一部分。 (请查看页面底部)
我还有更好的参考资料:
Nabble表示:
SetTimeout和setInterval来自原始JavaScript规范,即ECMA之前的版本。该规范在任何地方都没有正式标准化,但它得到了所有Web浏览器以及JavaScript语言的大多数实现的支持。(包括ActionScript。)
ECMA之前的规范通常被称为“DOM-0”API。由于它们以前从未被标准化过,因此HTML5最终为这些弃用的API制定规范,以尝试在浏览器之间提供一致的环境。特别是最近发生的事件证明,确实有一些公司喜欢实现标准的字面意思,但不喜欢实现它所代表的精神。
在此处阅读原始规范或者可以从Sun(早期支持JavaScript的公司)这里阅读它。
在Opera 9、Safari 3、Firefox 3和IE 7下进行了测试。
setTimeOut()
和setInterval()
的每次调用都返回从1开始递增的整数值。但是,我注意到浏览器启动计数器并以不同的方式处理它们:
setTimeOut()
和setInterval()
时递增。像Opera一样,每个选项卡都有自己的计数器值,但它们似乎都从2开始。请注意,在所有情况下,没有两个标识符(至少在同一选项卡中)是相同的。
我认为这不是一种标准行为。在Firefox中,它只是一个整数,在每次调用setTimeout
或setInterval
时递增。而且,它们不能具有相同的值。
来自 Mozilla 网站:
intervalID 是您可以传递给 clearInterval() 的唯一间隔 ID。
所以它是唯一的 :)
它们是否具有相同的值取决于JavaScript实现。正如Maciej在Firefox中提到的那样,它们不能具有相同的值,因为使用了相同的计数器。然而,在其他浏览器中可能会有所不同,因此最好不要依赖于它们永远不具有相同的值。
听起来返回的值是他们内部维护的计时器/间隔列表的索引值。
例如,我调用了clearInterval(18)而不是clearInterval(var_returned_from_set),它停止了所需的计时器/间隔。(在FF17.0.1和IE9.0.8中测试过)
在我的测试中,它们在这两个浏览器的页面生命周期内似乎是唯一的。