簡體   English   中英

setInterval / setTimeout返回值

[英]setInterval/setTimeout return value

兩個問題:

  1. 如何計算從setIntervalsetTimeout (用於清除計時器的那些)返回的值?

  2. 這兩個函數是否可以在運行時返回相同的值? 例如:

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

ab有可能具有相同的值嗎?

第一個問題更多是關於我的知識問題,但第二個更重要。

返回一個可用於取消計時器的值。 因此,它們似乎不太可能返回相同的值(除非它們重用值並且其中一個定時器已被取消)

Mozilla聲明它的DOM級別為0,但不是規范的一部分。 (查看頁面底部)

我有一個更好的參考:

Nabble說:

SetTimeout和setInterval來自原始的Javascript規范,ECMA之前。 該規范在任何地方都沒有正式標准化,但它受到所有Web瀏覽器和Javascript語言的大多數實現的支持。 (包括ActionScript。)

ECMA之前的規范通常稱為“DOM-0”API。 由於它們之前從未被標准化,因此HTML5最終規定未棄用的API以嘗試跨瀏覽器提供一致的環境是有意義的。 特別是當最近的事件證明有些公司喜歡實施標准的信,而不是精神。

閱讀這里的原始規范,或者從Sun (他是JavaScript的早期代言人) 那里閱讀。

在Opera 9,Safari 3,Firefox 3和IE 7下進行了測試。

所有返回的整數值,從1開始,然后對每次調用setTimeOut()setInterval()遞增1。 但是,我注意到瀏覽器啟動了計數器並以不同方式處理它們:

  • IE以(看似)隨機的6位數字開頭,但后續調用任一函數都會增加這個數字。 在關閉並重新打開IE后,我發現起始編號似乎是隨機生成的,因為它與前一個會話的計數相差無幾。
  • Opera為每個選項卡維護了一個計數器 - 關閉一個選項卡並打開一個新選項卡從新選項卡中的1開始計數器。
  • 在Safari中,計數是全局的 - 打開一個新選項卡並在不同選項卡中調用函數似乎增加了一個全局引用計數器。
  • 在Firefox中,計數器似乎從2開始,並在每次后續調用任一函數時遞增。 與Opera一樣,每個標簽都有自己的計數器值,但它們似乎都從2開始。

但請注意,在所有方案中,沒有兩個標識符(至少在同一選項卡中)是相同的。

我認為這不是一種標准化的行為。 在firefox中,它只是整數,在每次調用setTimeoutsetInterval遞增。 而且,不,他們不能擁有相同的價值。

來自Mozilla網站:

intervalID是您可以傳遞給clearInterval()的唯一間隔ID。

所以它是獨一無二的:)

它們是否可以具有相同的值取決於JavaScript實現。 正如Maciej在Firefox中提到的那樣,它們不能使用與使用相同計數器相同的值。 但是,在其他瀏覽器中可能會有所不同,因此最好不要依賴它們從不具有相同的值。

聽起來,返回的值是他們保留的任何內部維護的定時器/間隔列表的索引值。

就這一點而言,我調用了clearInterval(18)而不是clearInterval(var_returned_from_set),並且它停止了所需的定時器/間隔。 (經過測試的FF17.0.1和IE9.0.8)

同樣在我自己的測試中,它們在這兩種瀏覽器的頁面生命周期中看起來都是唯一的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM