setInterval/setTimeout返回值

adi*_*tya 39 javascript settimeout setinterval

两个问题:

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

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

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

是否有可能ab具有相同的价值?

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

cgp*_*cgp 36

返回一个可用于取消计时器的值.因此,它们似乎不太可能返回相同的值(除非它们重用值并且其中一个定时器已被取消)

Mozilla声明它的DOM级别为0,但不是规范的一部分.(查看页面底部)

我有一个更好的参考:

Nabble说:

SetTimeout和setInterval来自原始的Javascript规范,ECMA之前.该规范在任何地方都没有正式标准化,但它受到所有Web浏览器和Javascript语言的大多数实现的支持.(包括ActionScript.)

ECMA之前的规范通常称为"DOM-0"API.由于它们之前从未被标准化,因此HTML5最终规定未弃用的API以尝试跨浏览器提供一致的环境是有意义的.特别是当最近的事件证明有些公司喜欢实施标准的信,而不是精神.

阅读这里的原始规范,或者从Sun(他是JavaScript的早期代言人)那里阅读.

  • 10 年后,在后 HTML5 世界中,根据 [WhatWG](https://html.spec.whatwg.org/#timers) 和 [W3C](https://www.w3.org/TR /html5/webappapis.html#list-of-active-timers) HTML 规范中,ID“在实现 [WindowOrWorkerGlobalScope mixin]/[WindowTimers interface] 的对象的生命周期内在列表中必须是唯一的”。基本上,任何符合规范的实现都不会(在一个窗口范围内)重用 ID。setTimeout 和 setInterval 使用相同的 ID 列表(并且不会重用其他使用的任何 ID)。 (2认同)

Ale*_*ski 33

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

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

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

但请注意,在所有方案中,没有两个标识符(至少在同一选项卡中)是相同的.

  • 我希望找出返回的值是否总是真实的,虽然未指定,但似乎是这种情况.感谢您检查所有这些浏览器. (10认同)

Mac*_*ski 7

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