JavaScriptの大きな特徴の1つは、「シングルスレッド」基盤の言語だという点です。スレッドが1つということは、同時に1つの作業だけを処理できるということです。しかし、実際にJavaScriptが使われる環境を考えてみると、多くの作業が同時に処理されていることが分かります。例えば、Webブラウザは、アニメーション効果を見せながら、マウスの入力を受けて処理をし、Node.js基盤のWebサーバーでは、同時に複数のHTTPリクエストを処理したりします。スレッドが1つなのに、どうしてこのようなことができるのでしょうか?質問を変えると、「JavaScriptはどのように同時実行(Concurrency)をサポートしているのでしょうか?」 このとき登場する概念が「イベントループ」です。Node.jsを導入した際、イベントループ基盤の非同期方式でNon-Blocking IOに対応して...」のようなフレーズを見たことがあるでしょう。つまり、JavaScriptはイベントループを用いて非同期方式で同時実行をサポートします。多言語の同期方式を使用している方、Node.jsなどからJavaScriptに初めて接する方は、この「イベントループ」の概念に慣れておらず苦労することが多いでしょう。また一方で、JavaScriptを長年使用している方、非同期方式のプログラミングに精通している方でも、イベントループが実際にどのように動作するかについては詳しく分からない場合が多いようです。 少し前の動画ですが、Help, I'm stuck in an event-loopをたまたま見たとき、自分がイベントループについて誤って理解している部分が多いことが分かりました。そこでこの機会に整理も兼ねて、イベントループの重要な事実をいくつか共有したいと思います。 ECMAScriptは、イベントループがない