JavaScript が作成している「スレッド」を確認する方法はありますか? たとえば、DOM 要素にアタッチされたイベント ハンドラーがある場合、JavaScript は暗黙的に新しいスレッドを作成してそのコードをバックグラウンドで実行すると思いますか? もしそうなら、JavaScript が開いているさまざまな「スレッド」を (Firebug、WebKit インスペクターなどを介して) 確認する方法はありますか? (そして、JavaScript が使用しているのがスレッドでない場合、イベント ハンドラーは「舞台裏」でどのように機能するのでしょうか?)
4 に答える
JavaScript はスレッドを作成しません。基盤となるブラウザーは、独自のスレッド化された環境でイベントを処理し、JavaScript インタープリターにハンドラーを実行させている可能性がありますが、JavaScript にはスレッド アクセスがなく、ブラウザーの動作は実装によって異なります。
JavaScript は新しいスレッドを作成せず、ブラウザーで実行されます。この情報を実際に見ることはできません。プロファイラーを使用できますが、それがあなたの質問に答えているかどうかはわかりません
JavaScriptは「シングルスレッド」であり、すべての実行は線形です(ただし、基盤となるエンジンがどのように機能するかはわかりません)。
非同期アクションはイベントベース(DOMイベント、Ajax呼び出し、WebWorkers)であるため、ハンドラーの実行はスケジューラーキューに追加されます。現在の実行が終了したときにのみ実行されます。そのため、無限ループを外部から停止することはできません。無限ループはブラウザをフリーズさせるだけです(最終的にはlong-running script
例外をスローします)。
タイムアウト(W3Timer
仕様)でも同じで、アクティブなタイマーのリストにタスクを追加します。このようなタスクキューの詳細については、Web-AppAPIの処理モデル仕様を参照してください。
このツールを使用して、目的が達成されるかどうかを確認してください: Visual Event