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