0

これは window.setInterval の Mozilla Developer Network の例です。

var intervalID = window.setInterval(func, delay[, param1, param2, ...]);
var intervalID = window.setInterval(code, delay);

(ここで見つけることができます: https://developer.mozilla.org/en/DOM/window.setInterval )

私はこれらのタイプのアルゴリズムのコンパイルされたJavaプログラミングに慣れているので、私の質問は次のとおりです。

intervalID はどのように機能しますか? 舞台裏である種の再帰関数が行われているようですが、それは完全な推測です-それはどのように構造化されており、その構造(おそらくかなり大きい)はintervalIDとして保存され、待機していclearInterval(intervalID)ますか?

4

2 に答える 2

1

intervalIDsetIntervalどの間隔が進行中であるかを識別する関数によって返される単なる数値です。

関数と間隔のタプルへの数値のマップがあるかのように想像してください。これはおそらく実際に実装されている方法ではありませんが、それがどのように機能するかのメンタルモデルとして十分に機能すると思います

11: [function () { ... }, 500],
27: [function () { ... }, 230],
875: [function () { ... }, 650]
...

マップ内の各関数は、指定された間隔で実行され続けます。マップ内のアイテムに対応する ID で呼び出すclearIntervalと、そのアイテムが削除され、関数の実行が停止します。

于 2012-07-09T10:57:37.800 に答える
1

Firefox ブラウザでどのように動作するかを知りたいと仮定して説明します (各ブラウザには、同じメソッドの独自の実装があります)。実装はnsGlobalWindow::SetTimeoutOrInterval()で見つけることができ、実際には非常に簡単です。各ウィンドウには未処理のタイムアウトのリストがあり、呼び出すwindow.setInterval()と新しいタイムアウト構造が作成され、そのリストに追加されます。タイムアウト構造には、コールバックを呼び出す必要があるたびにウィンドウに通知するタイマー オブジェクトへの参照が含まれています。また、mPublicId単純な数値のメンバーがあります。これは、作成された新しいタイムアウトごとに増分され、によって返されsetInterval()ます。電話するとclearInterval()リスト内の一致する ID でタイムアウトを検索し、それを削除します。

于 2012-07-09T10:58:14.263 に答える