两个问题:
如何计算setInterval
和setTimeout
(用于清除计时器的那些)的值?
这两个函数是否可以在运行时返回相同的值? 例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a
和b
是否可以拥有相同的值?
第一个问题更多是关于我的知识问题,但第二个更重要。
答案 0 :(得分:34)
Returns a value which can be used to cancel the timer.所以,它们似乎不太可能返回相同的值(除非它们重用值并且其中一个定时器已被取消)
Mozilla states it's DOM level 0, but not part of the specification.(请查看页面底部)
我有一个更好的参考:
Nabble说:
SetTimeout和setInterval来自 原始的Javascript规范, 预ECMA。那个规范不是 官方标准化,但是 它受到所有Web浏览器的支持 和大多数的实现 Javascript语言。 (包含 动作脚本。)
ECMA之前的规格通常被称为 “DOM-0”API。既然他们有 从来没有被标准化,它 最终规范HTML5是有意义的 尝试使用未弃用的API 提供一致的环境 跨浏览器。特别是当 最近的事件证明了那里 是那些喜欢实施的公司 标准的字母,但不是 精神。
答案 1 :(得分:32)
在Opera 9,Safari 3,Firefox 3和IE 7下进行了测试。
所有返回的整数值,从1开始,然后对每次调用setTimeOut()
和setInterval()
递增1。但是,我注意到浏览器启动了计数器并以不同方式处理它们:
请注意,在所有情况下,没有两个标识符(至少在同一个标签中)是相同的。
答案 2 :(得分:6)
我认为这不是一种标准化的行为。在firefox中,它只是整数,每次调用setTimeout
或setInterval
时都会递增。而且,不,他们不能拥有相同的价值。
答案 3 :(得分:2)
来自Mozilla网站:
intervalID是您可以传递给clearInterval()的唯一间隔ID。
所以它是独一无二的:)
答案 4 :(得分:1)
它们是否可以具有相同的值取决于JavaScript实现。正如Maciej在Firefox中提到的那样,它们不能使用与使用相同计数器相同的值。但是,在其他浏览器中可能会有所不同,因此最好不要依赖它们从不具有相同的值。
答案 5 :(得分:0)
对我来说,返回的值是他们保留的任何内部维护的计时器/间隔列表的索引值。
就这一点而言,我调用了clearInterval(18)而不是clearInterval(var_returned_from_set),它停止了所需的定时器/间隔。 (经过测试FF17.0.1和IE9.0.8)
同样在我自己的测试中,它们在这两种浏览器的页面生命周期中看起来都是唯一的。