javascript実行環境変数オブジェクト


一.実行環境(execution context):抽象概念であり、実行環境が変数を定義したまたは関数が他のデータにアクセスする権限です.
すべてのjavascriptコードは実行環境において実行されます.各関数は自分の実行環境があります.まずデフォルトはグローバル実行環境に入り、次の関数を呼び出すと、新しい実行環境が作成されます.関数が戻ったら、実行したプロセスは元の実行環境に戻ります.実行中のjavascriptコードは実行環境スタックを構成しています.スタックの底には常にグローバルコンテキストがあり、スタックトップは現在(アクティブ)の実行コンテキストである.
 javascriptの中で実行環境は二つの種類に分けられています.一つはグローバル環境で、一つはローカル環境です.全体ページで共有される方法と属性はグローバル環境です.その中に保存されているすべての変数と関数の定義も破壊されました.
実行環境は、作成(実行コンテキストに入る、すなわちコード実行前)と実行コードの2段階に分けられてもよい.作成段階では、まず、構文で宣言された以下の内容が格納されている変数オブジェクトを作成します.
実行環境の変数(var):名前と対応値(undefined)からなる変数オブジェクトの属性が作成されます.
関数宣言:
関数パラメータ:名前と対応する値からなる変数オブジェクトの属性が作成され、対応するパラメータが渡されない場合は、名前とundefined値からなる変数オブジェクトの属性も作成されます.
実行段階では、コードが解釈され実行されます.これに応じて、活動対象Active object/Varable Object変数オブジェクトが変更されます.
function test(a,b){
   var c=10;
   function d(){
   var e=function ee(){};//ee         ,        e,        e   
   (function x(){}); //AO     x,           
};
}
test(10);
testの関数の実行コンテキストに入ると、まだコードの実行が開始されていません.
Active object(test)={
 a:10、/関数の参照
 b:undefined、/関数の別の形参
 c:undefined/変数宣言
 d:、/関数宣言
 e:undefined/変数宣言

コードの実行段階では、AO/VOは既に属性を持っています.(すべての属性に値があるのではなく、ほとんどの属性の値はシステムのデフォルトの初期値undefiendです.)コード解釈中にこれらの値は対応して修正されます.
Active object(test)={
 a:10、/関数の参照
 b:undefined、/関数の別の形参
 c:10、/変数宣言
 d:、/関数宣言
 e:
 二.変数オブジェクト(variable object):変数は実行コンテキストに関連しているので、変数自身はそのデータがどこに記憶されているかを知るべきであり、どのようにアクセスするかを知るべきである.
     var a=10;
     function test(x){
      var b=20;
          };
     test(30);
  対応する変数オブジェクトは以下の通りです.
      //グローバルコンテキストの変数オブジェクト
       variable object(Global oject)={
       a:10,
       test:<>

     //test関数コンテキストの変数オブジェクト
      variable object(test)={x:30,
          b:20

グローバルオブジェクト(Global object)は、任意の実行コンテキストに入る前に作成されたオブジェクトです.このオブジェクトは一つしかありません.属性はプログラムのどこにでもアクセスできます.グローバルオブジェクトのライフサイクルはプログラム終了時に終了します.
    アクティブオブジェクト(Active object)は、関数のargments属性により初期化された関数コンテキストに入るタイミングで作成されます.
関数実行文脈では、VOは直接アクセスできません.このとき、アクティブオブジェクトによってVOの役割が演じられます.アクティブコンテキストは、関数コンテキストに入る時点で作成されます.
三.まとめ:
    コンテキストを実行するデータ(変数、関数宣言、関数パラメータ)は変数オブジェクトに格納され、変数オブジェクトは実行コンテキストに入るたびに作成され、デフォルトの初期値を持ってコード実行段階に進みます.これらの値は更新されます.これらの基本的な概念は作用域、閉鎖などのいくつかの概念に基礎を定めた.