JavaScriptとは
JavaScript(ジャバスクリプト)は、Webページへ動作や対話機能を加えるため広く使われるプログラミング言語です。DOMの変更、イベント処理、ネットワーク要求、アニメーション、データ変換、サーバーアプリケーション等に使われます。
言語の標準仕様はECMAScript(エクマスクリプト)としてEcma InternationalのECMA-262に定められます。JavaScriptはその言語を実装し、ブラウザーやサーバー等のホストが追加APIを提供します。
DOM、fetch、タイマー、イベントループはECMAScript言語そのものではありません。JavaScriptコードから使えるため一体に見えますが、ブラウザーホストが用意する機能です。

実行を八つの要素に分ける
Unicodeテキストを字句解析し、文法に従ってプログラムとして解析します。
適用範囲、束縛、構文エラーを確認し、内部表現へ変換します。
インタープリターとJIT コンパイラーを組み合わせ、頻繁な処理を最適化します。
機能フレームを積み、戻り値や例外送出で上から取り除きます。
参照関係を持つ値を置き、到達不能なオブジェクトを不要データ収集します。
DOM、ネットワーク、タイマー、保存領域等へブラウザーが定めたインターフェースで依頼します。
処理とマイクロタスクは別のチェックポイント規則で実行候補になります。
処理、マイクロタスク、レンダリング実行機会等をHTMLの処理モデルで進めます。
スクリプトとモジュールは読込規則が違う
従来型スクリプトは通常のグローバルスクリプトとして評価され、defer・asyncで取得と実行時期を調整できます。JavaScript module(ジャバスクリプト・モジュール)は取り込み・書き出し、モジュール適用範囲、依存先グラフを持ち、既定で遅延実行相当です。
モジュールはURL単位で解決・キャッシュされ、CORS規則も適用されます。記述場所だけで実行順を推測せず、解析器処理を止める、依存先取得、最上位待機を確認します。
呼び出しスタックが長時間塞がると画面も止まる
主要スレッド上で長いループや重いデータ処理を続けると、入力イベント、タイマーコールバック、レイアウト・描画へ制御が戻りません。「非同期機能」と書いても、その中の同期計算は自動的に別スレッドへ移りません。
処理を小さな処理へ分ける、アルゴリズムを改善する、Web Workerへ移す、WebAssemblyを検討する等で主要スレッドを空けます。ただしDOMは通常ワーカーから直接操作できません。
Promiseは別スレッドではなく完了通知の仕組み
Promise(プロミス)は将来得られる値または失敗を表します。ネットワーク等のホスト処理が完了すると後続処理がマイクロタスク待ち行列へ入り、現在のJavaScriptジョブが終わったチェックポイントで処理されます。
マイクロタスクを際限なく追加すると次の処理やレンダリングが進めません。処理、マイクロタスク、アニメーションフレームの選択は用途に合わせます。
動的型付けは「型がない」という意味ではない
JavaScriptの値にはNumber、BigInt、String、Boolean、Symbol、Object等の型があります。変数へ格納する値の型を実行中に変えられるためdynamically typed(ダイナミカリー・タイプド)と呼ばれます。
==の型変換、浮動小数点、nullと未定義値、オブジェクト参照を理解し、境界データは明示的に検証します。TypeScriptの静的確認は開発時支援で、実行時に入る外部データを保証しません。
ブラウザー以外でも同じ言語を使える
サーバー実行時、デスクトップアプリケーション、組み込み機器、自動化ツールにもJavaScriptエンジンを組み込めます。ホストAPIは環境ごとに異なり、ブラウザーのdocumentがサーバーにあるとは限りません。
JavaScriptはECMAScriptに基づく言語です。エンジンがコードとメモリーを扱い、ブラウザーホストがDOM・ネットワーク・タイマーを提供し、イベントループが実行機会をつなぎます。
JavaScript言語の型、実行、module等を定める現行標準:ECMA-262「ECMAScript Language Specification」。browserのevent loop、task、microtask、rendering処理model:WHATWG HTML「Event loops」