2つの質問:
setInterval
およびsetTimeout
(タイマーのクリアに使用されるもの)から返される値はどのように計算されますか?
実行時に両方の関数が同じ値を返すことは可能ですか?例えば:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a
とb
が同じ値を持つことは可能ですか?
最初の質問は私の知識の質問ですが、2番目の質問はより重要です。
タイマーをキャンセルするために使用できる値を返します。 したがって、同じ値を返す可能性は低いようです(値を再利用していて、タイマーの1つが既にキャンセルされている場合を除く)
MozillaはDOMレベル0であると述べていますが、仕様の一部ではありません。 (ページの下部を見てください)
さらに良いリファレンスがあります:
ナブル 言う:
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ずつ増加するすべての整数値を返しました。しかし、ブラウザーがカウンターを開始し、それらを異なる方法で処理していることに気付きました。
ただし、すべてのシナリオで、(少なくとも同じタブにある)2つの識別子が同じではないことに注意してください。
標準化された動作ではないと思います。 firefoxでは、これは単なる整数であり、setTimeout
またはsetInterval
の呼び出しごとに増加します。そして、いや、彼らは同じ価値を持つことはできません。
Mozilla Webサイトから:
intervalIDは、clearInterval()に渡すことができる一意の間隔IDです。
だからそれはユニークです:)
同じ値を持つことができるかどうかは、JavaScriptの実装に依存します。 FirefoxでMaciejが言及したように、同じカウンターが使用されるため、同じ値を持つことはできません。ただし、他のブラウザでは異なる可能性があるため、同じ値を持たないブラウザに依存しないことをお勧めします。
返される値は、内部で保持しているタイマー/間隔のリストのインデックス値であるように思えます。
ポイントとして、clearInterval(var_returned_from_set)の代わりにclearInterval(18)を呼び出し、目的のタイマー/間隔を停止しました。 (FF17.0.1およびIE9.0.8のテスト済み)
また、私自身のテストでは、それらは両方のブラウザーのページの存続期間中に一意であるように見えます。