TIL. コアJavaScript-実行コンテキスト


実行コンテキスト(execution context)


📌 実行コンテキストとは?


実行するコードで提供される環境情報をまとめたオブジェクト.
実行コンテキストがアクティブな場合、JavaScriptエンジンは、そのコンテキストに関連するコードの実行に必要な環境情報を収集し、実行コンテキストに格納します.

スタックとキュー

  • Stack : FILO(First In Last Out), LIFO(Last In First Out)
    -スタックは、1つのエントリしかない井戸のようなデータ構造です.
    -データが順番に格納されている場合、取り出し時に逆の順番で取り出す.
    -コールスタックを超えたときにエラーが発生しました.
  • queue : FIFO(First In First Out), LILO(Last In Last Out)
    -両方ともパイプのように開いたデータ構造です.
    -通常、一方が入力を担当し、他方が出力のみを担当する構造.
  • コンテキスト動作の実行

  • は、同じ環境で実行されるコードを収集するために必要な環境情報を収集することによってコンテキストを構築する.
  • で構成されたコンテキストをcallスタックにスタックします.
  • は、最上位のコンテキスト関連コードを実行する.
  • の完全なコードの環境と順序を確認します.
  • 実行コンテキストの構成方法

  • グローバルスペース
    :自動生成されます.
  • eval()関数
    :使えません.詳細については、MDN-eval()を参照してください。
  • 関数
    :通常、実行コンテキストを構築する方法です.
  • コンテキストと呼び出しスタックの実行


    例)
    // ------------------------- (1)
    var a = 1;
    function outer() {
      function inner() {
        console.log(a);
        var a = 3;
    
      }
      inner(); // -------------- (2)
      console.log(a);
    
    }
    outer(); // ---------------- (3)
    console.log(a);
    
    実行順序

  • (1)グローバルコンテキストに関連するコードを連続的に実行する

  • (3)outer関数の呼び出し
    :JavaScriptエンジンは外部環境情報収集→外部関数内部コードの順に行う

  • (2)内部関数の実行
    :内部関数の実行コンテキストが呼び出しスタックの一番上にある場合→外部関連コードの実行を停止→内部関数の内部コード順
  • コールスタックのプロセス例

    →実行コンテキストが呼び出しスタックの上部に積み重ねられた時点で、現在実行するコードに関連します.

    収集アクティビティの実行コンテキストについて


  • JavaScriptエンジンを使用するために作成された実行可能コンテキストオブジェクトに格納される情報.

  • VariableEnvironment
    環境レコード(スナップショット):現在のコンテキストの識別子について
    外部環境リファレンス(snapshot):外部環境について

  • LexicalEnvironment
    ≪環境レコード|Environment Record|ldap≫:現在のコンテキストの識別子について
    外部環境参照がいぶかんきょうさんしょう:外部環境情報がいぶかんきょうじょうほう

  • ThisBinding

  • VariableEnvironment

  • にはLexicalEnvironmentと同じ内容が含まれていますが、初期実行時のスナップショットが保持されている点が異なります.
  • 実行コンテキストが生成されると、まずVariableEnvironmentに情報が含まれ、その後情報をコピーしてLexicalEnvironmentを作成し、次に主にLexicalEnvironmentを利用する.
  • LexicalEnvironment

  • 韓国語の翻訳は、「語彙環境」、「静的環境」を意味する.
  • VariableEnvironmentと同じですが、変更はリアルタイムで反映されます.