2つの質問:
setInterval
およびsetTimeout
(タイマーをクリアするために使用される値)から返される値はどのように計算されますか?実行時に両方の関数が同じ値を返すことは可能ですか?例えば:
var a = setInterval(fn1, 1000);
var b = setTimeout(fn2, 1000);
a
とb
が同じ値を持つことは可能ですか?
最初の質問は私の知識のための質問ですが、2番目の質問はもっと重要です。
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を最終的に指定することは理にかなっています。特に最近の出来事が、基準の文字を実装することを好むが精神を実装することを好まない企業があることを証明したとき。
これをOpera9、Safari 3、Firefox 3、IE7でテストしました。
setTimeOut()
すべての戻り整数値。1から始まり、およびへの呼び出しごとに1ずつ増加しますsetInterval()
。ただし、ブラウザーがカウンターを開始し、それらを異なる方法で処理していることに気付きました。
ただし、すべてのシナリオで、2つの識別子(少なくとも同じタブ内)が同じではないことに注意してください。
私はそれが標準化された行動ではないと思います。setTimeout
Firefoxでは、これは単なる整数であり、またはの呼び出しごとに増分しますsetInterval
。そして、いいえ、それらは同じ値を持つことはできません。
MozillaのWebサイトから:
intervalIDは、clearInterval()に渡すことができる一意の間隔IDです。
だからそれはユニークです:)
それらが同じ値を持つことができるかどうかは、JavaScriptの実装によって異なります。MaciejがFirefoxで述べたように、同じカウンターが使用されているため、同じ値を持つことはできません。ただし、それは他のブラウザでは異なる可能性があるため、同じ値を持たないブラウザに依存しないことをお勧めします。
戻り値は、内部で維持されているタイマー/間隔のリストのインデックス値であるように思われます。
ポイントのように、clearInterval(var_returned_from_set)の代わりにclearInterval(18)を呼び出したところ、目的のタイマー/間隔が停止しました。(FF17.0.1およびIE9.0.8でテスト済み)
また、私自身のテストでは、これらは両方のブラウザのページの存続期間中は一意であるように見えます。