質問のタイトルと質問の本文は、2 つの異なることを求めているようです。私は両方に対処しようとします。
ボディクエスチョン
非同期は John が作り出した用語でも、JavaScript 固有の用語でもありません。これは、コンピューター サイエンスにおいて確立された意味を持ちます。ジョンの言うことは正確ですが、不完全だと思います。彼は、私たちが非同期という用語を使用する理由 (語源) を正しく説明していますが、非同期プログラミングとは何かについては説明していません。
コンピューター サイエンスでは、非同期とはコードの実行を一時停止し、他の (任意の) コードを同じスレッドで実行できるようにし、最終的に一時停止したコードを再開することを意味します。これを達成するための多くのテクニックと、プログラマーのためにこれを抽象化する多くの方法がありますが、それらはすべて、コードをブロックするのではなく中断するという特徴を共有しています。これは、遅いリソース (HTTP 要求、ファイル、またはデータベースなど) を待っている間にスレッド全体がブロックされるのを避けるために利用されます。
たとえば、同期HTTP リクエストを行う場合、リクエストが完了するまで他の JavaScript は実行できません。したがって、JavaScript に依存する Web ページのどの部分も凍結されます。ただし、非同期HTTP 要求を行う場合、要求を待機している間、要求を行うコードが中断される可能性があります。これにより、他のコードを実行できます。HTTP 要求が完了したら、要求コードを再開できます。
John が非同期コードが発生する可能性があると言う理由は、外部リソースがいつ利用可能になるかわからないためです。たとえば、2 つ以上の非同期 HTTP 要求を行う場合、要求がどの順序で完了するかを知る方法はありません (その結果、コードがどの順序で再開されるか)。
タイトルの質問
ブラウザー イベントは、サンプルの HTTP 要求と同じように非同期です。実際、多くの点で、ユーザーは別の外部リソースにすぎません。ユーザーは、現在実行中のコードとは非同期に、自分の時間に何かを行います。
たとえば、コードでページ上のボタンのクリック イベントのハンドラーを定義するとします。JavaScript コードは、ユーザーがボタンをクリックするのを待ちません。クリック ハンドラーのコードを一時停止し、後でユーザーがボタンをクリックしたときに実行します。これは、JavaScript で非同期プログラミングが非常に重要である理由の核心になります。HTTP 要求が完了するまでコードが単純にブロック (待機) された場合、ユーザーはボタンをクリックできませんでした。また、ユーザーが何かをクリックするのを待っている間にコードがブロックされた場合、HTTP 要求はタイムアウトになります。
最終的な考え
JavaScript では、コードの中断と再開について考えることはあまりありません。実際、実行中のコード ブロックの途中で一時停止することはできません。ブロックは、他の何かが実行される前に常に完了します。代わりに、コード ブロックからコールバックを渡し、後で実行します。これらのコールバックは、元のコード ブロックからリソース (スコープ) にアクセスできます。コールバックは、元のコンテキストから再開されるものです。
JavaScript が同時実行モデルとイベント ループを管理する方法について詳しく知りたい場合、これは良いリソースです。また、JavaScript は、 PromisesやGeneratorsなど、コールバックを超えたイベント ループにいくつかの強力な抽象化を追加しました。これらは時間を費やす価値があります。