Webアプリケーション用のJavascriptで作業しているときに、使用したことに気付きましたがsetTimeout
、それをクリアしようとしたclearInterval
ところ、GoogleChromeとInternetExplorer9でタイムアウトが発生しなくなりました。
互換性がclearTimeout
ありますか?clearInterval
これが私が話していることの例を持ったJSfiddleです。
Webアプリケーション用のJavascriptで作業しているときに、使用したことに気付きましたがsetTimeout
、それをクリアしようとしたclearInterval
ところ、GoogleChromeとInternetExplorer9でタイムアウトが発生しなくなりました。
互換性がclearTimeout
ありますか?clearInterval
これが私が話していることの例を持ったJSfiddleです。
実際、W3C仕様( http://www.w3.org/TR/html5/webappapis.html#timers )からかなり強力な結論を出すことができると私は信じています。明示的に保証されているわけではありませんが、ほとんどすべての合理的な実装でこの動作が行われるという多くの証拠があります。
1)タイムアウトと間隔は、実際には同じ基本関数を使用します。
setTimeout()メソッドは、タイマー初期化ステップによって返された値を返し、メソッドの引数を渡す必要があります...そして繰り返しフラグはfalseに設定されます。
setInterval()メソッドは、タイマー初期化ステップによって返された値を返し、メソッドの引数を渡し、繰り返しフラグをtrueに設定する必要があります。
2)この単一の関数(上記の「タイマー初期化ステップ」)は、タイマーの単一のリストを使用します。
2、... handleを、アクティブなタイマーのリストでこの呼び出しによって設定されるタイムアウトを識別する、ゼロより大きいユーザーエージェント定義の整数にします。
10、リターンハンドル...
3)clearTimeout()とclearInterval()は両方ともそのリストで動作します(実際、仕様によって区別されることはありません)
clearTimeout()メソッドとclearInterval()メソッドは、メソッドが呼び出されたWindowTimersオブジェクトのアクティブタイマーのリストからハンドルとして識別されたエントリをクリアする必要があります。ここで、handleはメソッドに渡される引数です(存在する場合)。(ハンドルが、メソッドが呼び出されたWindowTimersオブジェクトのアクティブなタイマーのリスト内のエントリを識別しない場合、メソッドは何もしません。)
これは、clearTimeoutとclearIntervalが仕様に従って同義語である必要があるというかなり強力なケースを示していると思います。これは、私がテストしたすべてのブラウザー(Chrome 37、Firefox 33、およびOpera 25)で機能するという事実によって裏付けられています。
いいえ、互換性はありません。
確かに、一部のブラウザーは同じコードを共有して間隔とタイムアウトを同じ方法でクリアする場合がありますが、それらが交換可能であることを意味するわけではなく、すべてのブラウザー実装で同じように動作することは保証されません。これらの2つの方法は、目的ごとに異なる方法で定義されているため、指定された用途に使用する必要があります。それ以外の場合は、問題を抱えているだけです。
setTimeout()とsetInterval()で使用されるIDのプールは共有されていることに注意してください。つまり、技術的にはclearTimeout()とclearInterval()を同じ意味で使用できます。ただし、わかりやすくするために、そうすることは避けてください。
現在は同義語として使用できますが、将来いつでも変更される可能性があります。スペードをスペードと呼んではいけないのはなぜですか?:-)