18

clearTimeout既に発生したイベントを呼び出しsetTimeoutたが、そのコールバックがまだ実行キューにclearTimeoutある場合、そのイベントは処理されませんか?

つまり、タイマーの起動とそのコールバックの実行の遅延中にタイムアウト イベントをクリアすることは可能ですか?

非公式に言えば、タイムアウトが発生すると、コールバックをキューに入れ、それ自体を破棄するclearTimeoutと思います。そのタイマーの ID で を作成しても、キューに入れられたコールバックには影響しません。

4

1 に答える 1

13

答えはイエスだと思います。(現在は Firefox を使用しています。)

編集— 完全を期すために、私が作成したテストは次のとおりです。

var t1 = setTimeout(function() {
  clearTimeout(t2);
}, 0);

var t2 = setTimeout(function() {
  alert("hello world");
}, 0);

スクリプト ブロックが終了した直後に両方のタイマーが「準備完了」になり、要求された順序で実行されるという考え方です。したがって、ブラウザがコールバックを実行する前に、「t1」は「t2」をクリアする必要があります。何も起こらないので、タイマーの期限が切れていたにもかかわらず、2 番目のコールバックが実行されなかったという点で、コールは「機能した」alert()と結論付けました。clearTimeout()

ブラウザでの正確な動作については、私がよく知っているわけでclearTimeout()はないため、同じ効果が得られない状況が発生する可能性があります。とにかく、実行モデルを考えると、かなり非決定論的です。

于 2012-08-28T18:20:20.473 に答える