兩個問題:的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