コアJavaScript第2章第2部(実行コンテキスト)


実行コンテキスト


実行コードに指定する環境情報を含むオブジェクト.
ex)グローバルコンテキスト、eval()関数、関数など

コンテキストの内部構造

  • VariableEnvironment:初期実行時のスナップショットを保持する
  • LexicalEnvironment:コピーVariableEnvironment、以降主に
  • を使用
  • ThisBinding
  • VariableEnvironmentとLexicalEnvironmentの内部構造

  • 環境レコード:その関数環境に
  • を持つ
  • 外部環境参照:外部関連
  • 下は上の内容を整理した画像です.

    				//1
    var a = 1;			//2
    var outer = function (){	//3	
      var inner = function(){	//5
        console.log(a);		//7
        var a = 3;			//8
      };				//9
      inner();			//6
      console.log(a);		//10
    };				//11
    outer();			//4
    console.log(a);			//12
    				//13

    動作原理の例


    作成
  • グローバルコンテキスト
  • a 1台
  • outer割当関数
  • 外部実行コンテキスト
  • を有効にする.
  • を割り当てる.
  • 内部実行コンテキスト
  • を有効にする.
  • console.log var aundefinedのaをブラウズし、
  • を出力する.
  • a割当3
  • 内部コンテキスト
  • を終了する.
  • console.ログによりaを検索するが、その環境レコードには含まれないため、外部環境ではグローバルコンテキストによりaを検索し、グローバルコンテキストの環境レコードでaを検索し、この1から出力
  • を取得する.
    終了
  • outer実行コンテキスト
  • グローバルコンテキストでaを検索して出力1
  • グローバルコンテキスト
  • を終了する.

    コンセプトアレンジ

  • グローバル変数vs地域変数
  • 実行コンテキストの意味
  • 実行コンテキストの構造(3種類)
  • 号給油
  • スキャン:識別子の有効範囲
  • this:指定されていない場合、グローバルオブジェクト
  • ソース


    コアJavaScript