[javascript] Execution Context


実行コンテキスト-実行コンテキスト


実行コンテキストは実行されるコードブロックであり、抽象的な概念である.
実行コンテキストは、実行時に作成されます.
実行コンテキストには,エスケープ後のコードの関数本文とthisバインディングなどの情報が含まれる.
JavaScriptで実行コンテキストを構成する方法は、実行関数(グローバルスペース)のみです.(ES 6にブロックスキャンの概念が追加されました)
ユーザーが関数を呼び出すと、関数を内部的に実行するために必要な環境情報を含む集合またはオブジェクトです.

実行コンテキストを含む情報

  • 変数情報(通常変数、パラメータ、関数宣言など)
  • スコフ情報
  • this情報
  • var a = 1;
    function outer() {
      console.log(a);   // 1: 1
    
      function inner() {
        console.log(a); // 2: undefined
        var a = 3;
      }
    
      inner();
      console.log(a);   // 3: 1
    }
    
    outer();
    console.log(a);     // 4: 1
    このバインド?この情報を含むプロセスと理解できる.

    コールスタック-コール構造


    コルステックとは、関数呼び出しスタックのことです.
    これは、現在どの関数が実行されているか、次にどの関数を呼び出すかなどを制御する資料構造です.
    プログラムは関数呼び出し(FunctionCall)を追跡するために使用され、各関数呼び出しはスタックで構成されます.

    Stack


    Stackは、先出し先出のLIFO構造を有する資料構造である.
    データを順番に積み上げ、積み上げ順に取り出します.
    スタックからデータを入れることをpush,スタックからデータを取り出すことをpopと呼ぶ.pushとpopの位置をtopと呼び,スタックの最下部をbottomと呼ぶ.

    開発者ツールのsourcesタブでcall stackを表示できます.

    コール構造制御規則

  • 関数(A)が呼び出されると、その関数はCall Stackにスタックされます.
  • 関数(A)によって呼び出される他の関数(B)があれば、関数(B)は関数(A)の上に積み上げられる.
  • 現在の関数の実行が終了すると、終了した関数はCall Stackから削除され、その下に積まれた関数の実行が続行されます.
  • 呼スタックが乱用されるとスタックオーバーフローが発生する.
  • 関数スタックに格納された情報

  • Variable Environment
  • Lexical Environment
  • 環境記録:現在のコンテキストの識別子(hoisting)
  • 外部環境参照:外部識別子(scope chain)
  • this Binding
  • 🔎 参考資料:再帰とスタック
    🔎 参考資料🔎
    - MDN
    - 生活コード
    - PoiemaWeb
    - javascript info
    - コアJavaScript
    - JavaScriptの実行
    - 内部JavaScript