两个问题:的setInterval/setTimeout的返回值
如何从
setInterval
和setTimeout
返回的值(使用的那些清除定时器)计算出来的?这两个函数是否有可能在运行时返回相同的值? 例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
是否有可能为a
和b
具有相同的价值?
第一个问题更多的是我的知识问题,但第二个问题更重要。
两个问题:的setInterval/setTimeout的返回值
如何从setInterval
和setTimeout
返回的值(使用的那些清除定时器)计算出来的?
这两个函数是否有可能在运行时返回相同的值? 例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
是否有可能为a
和b
具有相同的价值?
第一个问题更多的是我的知识问题,但第二个问题更重要。
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是回回m 最初的Javascript规范, pre-ECMA。该规范不是 正式在任何地方标准化,但 它支持所有网络浏览器 和大多数实现的JavaScript语言 。 (包括 ActionScript)
ECMA之前的规范通常被称为 “DOM-0”API。由于他们有 以前从未标准化,所以它 对HTML5有意义,最终规范 未弃用的API尝试 跨浏览器提供一致的环境 。特别是当最近的事件 已经证明有 是公司谁喜欢执行 信的标准,但不是 的精神。
从Mozilla的网站:
intervalID是一种独特的间隔ID可以传递给clearInterval()。
所以它是独一无二的:)
它们是否可以具有相同的值取决于JavaScript的实现。正如Maciej在Firefox中提到的,它们不可能具有与使用相同计数器相同的值。但是,其他浏览器可能会有所不同,所以最好不要依赖它们从不具有相同的价值。
Opera 9中,Safari浏览器3,火狐3和IE 7.
下测试所有这些返回的整数值,从1开始,然后通过1对每个呼叫递增到setTimeOut()
和setInterval()
。然而,我注意到,浏览器启动计数器和处理它们是不同的:
但请注意,在所有场景中,没有两个标识符(至少在同一个标签中)是相同的。
听起来,返回值是任何内部维护的定时器/间隔列表的索引值。
至此,我调用clearInterval(18)而不是clearInterval(var_returned_from_set),并停止了所需的定时器/间隔。 (经过测试的FF17.0.1和IE9.0.8)
另外在我自己的测试中,它们似乎对于这两种浏览器的页面生命周期都是唯一的。
对于从多个setInterval调用返回的值,它可能是唯一的,但不能保证与setTimeout返回的值有关的唯一性。 – 2009-06-02 15:29:59
“这两个函数是否有可能在运行时返回相同的值?” - 所以呃不,他们是独一无二的:) – Ropstah 2009-06-02 15:34:41