3

さて、私はjavascriptが初めてで、シングルスレッドだと聞きました。私の考えでは、非同期リクエストを行う場合、サーバーが既に応答したかどうかを制御する独自のスレッドを開始する必要があります。これは Javascript では機能しません。私は、(onreadystatechange) に「同意」した条件に応じて、すべてのリスナーを保存して呼び出す組み込みのメカニズムがあると考えています。

これは単なる仮定であり、私は完全に間違っていると思います。さて、誰かが私をここで助けてくれるでしょうか?

4

2 に答える 2

4

ここで説明するように、javascriptの実行自体のみがシングルスレッドです。ただし、基盤となるエンジンはより多くのスレッドを使用する可能性があります。

そのため、HTTPリクエスト(ブラウザの奥深くで作成されたもの)には独自のスレッドがある場合がありますが、何か(応答など)が発生すると、イベントが発生してJSタスクスケジューラにキューに入れられます。現在のスクリプトの実行が終了するとすぐに、onreadystatechange関数が呼び出されます。

于 2012-07-27T12:06:40.880 に答える
2

ご存じのとおり、XHR オブジェクトはすべてのブラウザーで異なります。たとえば、IE は ActiveX を使用し、FF は XMLHttpRequest オブジェクトを使用します... XHR2 オブジェクトを導入することでこれを HTML5 に統合しようとする試みがいくつかありますが、まだ広くサポートされていません。したがって、これはブラウザごとに異なる方法で実装されます。スレッドを使用するものもあれば、他のものを使用するものもあります。それは純粋なJavaScriptではありません。JavaScript がシングル スレッドであると人々が言うとき、それは JavaScript でスレッドを手動で作成できないことを意味します。しかし、これは非同期プログラミングができないという意味ではありません。

于 2012-07-27T12:04:06.953 に答える