setInterval / setTimeout返回值

时间:2009-06-02 15:11:37

标签: javascript settimeout setinterval

两个问题:

  1. 如何计算setIntervalsetTimeout(用于清除计时器的那些)的值?

  2. 这两个函数是否可以在运行时返回相同的值? 例如:

    var a = setInterval(fn1, 1000);
    var b = setTimeout(fn2, 1000);

  3. ab是否可以拥有相同的值?

    第一个问题更多是关于我的知识问题,但第二个更重要。

6 个答案:

答案 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   提供一致的环境   跨浏览器。特别是当   最近的事件证明了那里   是那些喜欢实施的公司   标准的字母,但不是   精神。

阅读原始规范hereSun(他是JavaScript的早期代言人)。

答案 1 :(得分:32)

在Opera 9,Safari 3,Firefox 3和IE 7下进行了测试。

所有返回的整数值,从1开始,然后对每次调用setTimeOut()setInterval()递增1。但是,我注意到浏览器启动了计数器并以不同方式处理它们:

  • IE以(看似)随机的6位数字开头,但后续调用任一函数都会增加此数字。关闭并重新打开IE后,我发现起始编号似乎是随机生成的,因为它与前一个会话的数量相差无几。
  • Opera为每个标签维护了一个计数器 - 关闭一个标签并打开一个新选项卡从新选项卡中的1开始计数器。
  • 在Safari中,计数是全局的 - 打开一个新选项卡并在不同选项卡中调用函数似乎增加了一个全局引用计数器。
  • 在Firefox中,计数器似乎从2开始,并在每次后续调用任一函数时递增。与Opera一样,每个标签都有自己的计数器值,但它们似乎都从2开始。

请注意,在所有情况下,没有两个标识符(至少在同一个标​​签中)是相同的。

答案 2 :(得分:6)

我认为这不是一种标准化的行为。在firefox中,它只是整数,每次调用setTimeoutsetInterval时都会递增。而且,不,他们不能拥有相同的价值。

答案 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)

同样在我自己的测试中,它们在这两种浏览器的页面生命周期中看起来都是唯一的。