Execution Context Stack
jsコードを実行するための環境が必要です:
実行コンテキストスタック
<=> <=> <=>等価:スタックスコープ・コンテキスト実行環境
実行可能なグローバル環境:EC(g)
関数が実行される環境:EC(function)
変数オブジェクト
変数が格納されている空間を変数オブジェクトと呼びます。
VO: グローバル変数オブジェクト。
AO:関数内の変数オブジェクト、EC(function)内にプライベート変数を格納。
コードが実行されると、すべてのスタックが順番に供給されます。
コードが実行され、中身が埋まっていなければ、スタックアウトです。
グローバル・オブジェクト
GO: ブラウザはいくつかのメソッドとプロパティをGOに提供します。
グローバル・ウィンドウ変数がGOを指すようにします。
グローバル変数windowはVOに格納されます。
そして、GOはVO/AOとは何の関係もありません。
これはここで理解できます:
GOとは、組み込みメソッドやプロパティであるキーと値のペアを含むメモリのヒープで、このメモリのヒープのアドレスがwindowに与えられ、windowがグローバルオブジェクトであることと同じです。
VO GOとの関係
var a = 1;
console.log(window.a);
=> 1
globalの下で宣言された変数は、GOに何らかのマッピングを持ちますが、これはGOにもそのようなプロパティを追加することと同じです。もし変数が宣言されておらず、EC(g)を知っているスコープを通してルックアップが実行され、何も見つからなかった場合、それはこのプロパティをGOに追加していることになります。
windowは特別なオブジェクトで、windowのメンバーアクセスには、"window. "を省略することができ、直接プロパティの名前を記述すると、内部のメソッドやプロパティを使用することができます。
変数の格納
1、複数の変数が同じ値を指すことはできますが、1つの変数が対応できる値は1つだけです。
2、変数オブジェクトは変数格納領域と値格納領域に分けられ、値が基本データ型の値であれば、値格納領域に直接格納され、変数がそれを指すようにします。値が参照データ型の値であれば、オブジェクトのキーと値のペアまたは関数のコード文字列を格納するためのヒープメモリが開かれ、このヒープメモリの空間のアドレスが値格納領域に置かれ、変数がそれを指すようにします。
オブジェクトのプロパティ名
1、オブジェクトメンバーアクセス、番号の内側にプロパティ名の文字列は、配列のインデックスのように、あなたは、転置カンマを省略することができます
let obj={},a="1",b=1;
obj[a]=" ;
obj[b]=" ;
console.log(obj["1"]);
=> "
2、および同じ理由で、最初の結論することができます:オブジェクトの属性名は、任意の基本的なデータ型にすることができます参照データ型にすることはできません、それは参照データ型である場合、それは文字列に変換されます。しかし、処理では、シンボルのデータ型に加えて、さまざまなデータ型と文字列が交換可能です。
let obj={};
obj[true]=1;
obj[null]=10;
obj[undefined]=" ;
console.log(obj);
=> {true: 1, null: 10, undefined: " }
console.log(obj["true"],obj["null"],obj["undefined"]);
=> 1 10 "
let obj ={};
obj[Symbol(10)]=20;
console.log(obj)
=> {Symbol(10): 20}
console.log["Symbol(10)"]
=> undefined
3, オブジェクトをトラバースする際に、シンボルデータ型が
let obj ={"name":"LiHua","age":18};
obj[Symbol(10)]=20;
for(let key in obj){
console.log(key);
}
=> name age
(注:キーは走査されるオブジェクトのプロパティ名で、プロパティの値はobjである。[key])





