1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptが同期であるのはいつ?

2022-04-20 15:14:23

質問

JavaScriptは常に非同期であるという印象を持っています。 しかし、そうでない状況もあることを知りました(たとえばDOM操作)。 いつ同期でいつ非同期なのか、どこか良い参考文献はないでしょうか? jQueryはこれに全く影響を与えないのでしょうか?

解決方法は?

JavaScriptは常に同期でシングルスレッドです。 あるページでJavaScriptのブロックコードを実行している場合、そのページ上の他のJavaScriptは現在実行されていません。

JavaScriptが非同期なのは、例えばAjaxを呼び出すことができるという意味においてのみです。Ajax呼び出しは実行を停止し、呼び出しが(成功するかどうかにかかわらず)戻るまで他のコードを実行することができ、その時点でコールバックが同期的に実行されます。この時点では、他のコードは実行されていません。現在実行中の他のコードを中断することはありません。

JavaScriptのタイマーもこれと同じようなコールバックで動作します。

JavaScriptを非同期と表現するのは誤解を招くかもしれません。JavaScriptは同期でシングルスレッドであり、様々なコールバック機構を備えていると言った方が正確です。

jQuery には、Ajax 呼び出し時に、同期的に呼び出すオプションがあります ( async: false というオプションがあります)。初心者は、より伝統的なプログラミングモデルに慣れているため、これを間違って使ってしまうかもしれません。このオプションが問題なのは、このオプションが すべて すべてのイベントハンドラやタイマーを含め、ページ上の JavaScript が終了するまで。