[英]setInterval/setTimeout return value
兩個問題:
如何計算從setInterval
和setTimeout
(用於清除計時器的那些)返回的值?
這兩個函數是否可以在運行時返回相同的值? 例如:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a
和b
有可能具有相同的值嗎?
第一個問題更多是關於我的知識問題,但第二個更重要。
返回一個可用於取消計時器的值。 因此,它們似乎不太可能返回相同的值(除非它們重用值並且其中一個定時器已被取消)
Mozilla聲明它的DOM級別為0,但不是規范的一部分。 (查看頁面底部)
我有一個更好的參考:
Nabble說:
SetTimeout和setInterval來自原始的Javascript規范,ECMA之前。 該規范在任何地方都沒有正式標准化,但它受到所有Web瀏覽器和Javascript語言的大多數實現的支持。 (包括ActionScript。)
ECMA之前的規范通常稱為“DOM-0”API。 由於它們之前從未被標准化,因此HTML5最終規定未棄用的API以嘗試跨瀏覽器提供一致的環境是有意義的。 特別是當最近的事件證明有些公司喜歡實施標准的信,而不是精神。
在Opera 9,Safari 3,Firefox 3和IE 7下進行了測試。
所有返回的整數值,從1開始,然后對每次調用setTimeOut()
和setInterval()
遞增1。 但是,我注意到瀏覽器啟動了計數器並以不同方式處理它們:
但請注意,在所有方案中,沒有兩個標識符(至少在同一選項卡中)是相同的。
我認為這不是一種標准化的行為。 在firefox中,它只是整數,在每次調用setTimeout
或setInterval
遞增。 而且,不,他們不能擁有相同的價值。
來自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.