JavaScript はシングルスレッド環境で動作します。つまり、一度に 1 つのタスクを実行します。グローバルまたはファンクショナルのいずれかである実行コンテキスト (EC) でコードの実行を処理します。
グローバル実行コンテキスト (GEC)
コード ファイルのロード時に作成されます。
GEC は、グローバル オブジェクト (ブラウザーではウィンドウ) と this キーワードのセットアップを担当します。
グローバル スコープで宣言されたすべての変数と関数は、グローバル EC に保存されます。
実行コンテキストフェーズ
メモリ作成フェーズ:
メモリフェーズでは、JavaScript は変数と関数にメモリを割り当てます。
変数には最初は未定義の値が割り当てられますが、関数は完全な定義でメモリに保存されます。
実行フェーズ:
メモリ割り当てフェーズの後、JavaScript はコードを 1 行ずつ実行し始めます。
変数に実際の値が割り当てられ、関数が実行されます。
機能実行コンテキスト (FEC)
関数が呼び出されるたびに、JavaScript はその関数専用の新しい実行コンテキストを作成します。
各関数の実行コンテキストには 2 つのフェーズがあります:
メモリフェーズ: メモリはローカル変数と関数内の関数に割り当てられます。
実行フェーズ: 関数本体が実行され、変数が実際の値を取得します。
実行後、関数の実行コンテキストは破棄され、メモリが解放されます。
リターンステートメント
関数が return ステートメントに到達すると、関数は直ちに終了し、その実行コンテキストは呼び出しスタックから削除されます。 return ステートメントの後に書かれたコードは実行されません。
呼び出しスタック
JavaScript は呼び出しスタックを使用して実行コンテキストを管理します。
LIFO (後入れ先出し) の概念が使用されます:
関数が呼び出されると、その実行コンテキストがスタックの最上位に配置されます。
関数が完了すると (またはリターンに到達すると)、その実行コンテキストはスタックからポップされます。
JavaScript はシングルスレッドです
シングルスレッドとは、JavaScript が一度に 1 つの操作しか実行できないことを意味しますが、それでも非同期操作を実行できることは、次回の投稿で JavaScript のこの驚くべき機能について説明するので、それほど興味深いものではありません。
以上がJS はバックグラウンドでどのように動作するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。