JavaScriptの実行文脈スタック
1440 ワード
JSの実行可能コード
JSの実行可能コードは3種類に分けられます.グローバルコード、関数コード、evalコード、ここでは次の関数の実行状況について重点的に検討します.
コンテキストを実行
実はここの実行文脈は簡単な理解です.私達が関数を実行する時にまず環境に入ります.この環境はコンテキストを実行してから実行します.JSは、これらのコンテキストの環境をスタックで配置する(コンテキストスタックを実行する).
コンテキストスタックを実行
JavaScriptエンジンは、実行文脈スタック(Execution context stack、ECS)を作成して、実行文脈を管理しています.私たちはアナログ実行文脈は行列です.
参照リンク:https://github.com/mqyqingfeng/Blog/issues/4
JSの実行可能コードは3種類に分けられます.グローバルコード、関数コード、evalコード、ここでは次の関数の実行状況について重点的に検討します.
コンテキストを実行
実はここの実行文脈は簡単な理解です.私達が関数を実行する時にまず環境に入ります.この環境はコンテキストを実行してから実行します.JSは、これらのコンテキストの環境をスタックで配置する(コンテキストスタックを実行する).
コンテキストスタックを実行
JavaScriptエンジンは、実行文脈スタック(Execution context stack、ECS)を作成して、実行文脈を管理しています.私たちはアナログ実行文脈は行列です.
ECStack = [];
JavaScriptが実行コードを説明し始めると、最初に遭遇したのはグローバルコードです.初期化するとまず実行コンテキストスタックにグローバル実行コンテキストを入力します.global Contextで表します.そしてアプリケーション全体が終了する時だけ、ECStockはクリアされます.ECStack = [
globalContext
];
例を見に来ました.var scope = "global scope";
function checkscope(){
var scope = "local scope";
function f(){
return scope;
}
return f();
}
checkscope();
このコードのコンテキストの変化を見てみます.ECStack.push( functionContext);
ECStack.push( functionContext);
ECStack.pop();
ECStack.pop();
次にその一つとそれがよく似ている例を見ます.var scope = "global scope";
function checkscope(){
var scope = "local scope";
function f(){
return scope;
}
return f;
}
checkscope()();
コンテキストの変更を実行ECStack.push( functionContext);
ECStack.pop();
ECStack.push( functionContext);
ECStack.pop();
上記の例は結果は同じであるが、実際のプロセスではコンテキストスタックの変化が異なることを見ることができる.参照リンク:https://github.com/mqyqingfeng/Blog/issues/4