標籤:
一。ECStack
執行內容是一個堆棧,每次進入function時,則會將該function context壓入棧,當從function 退出時候,則會從ECStack彈出該Function context.
二。Global Contexts
在程式初始化時候,則會壓入到ECStacks中,例如:
ECStack = [ globalContext];
三。Function Code
當執行進入Function時,ECStack 將會push 進一個新的Item,需要注意的是,該新的Item不包含Function內部的Funtion.
(function foo(flag) { if (flag) { return; } foo(true);})(false);
當遞迴執行foo時候,ECStack的狀況表現如下:
// first activation of fooECStack = [ <foo> functionContext globalContext]; // recursive activation of fooECStack = [ <foo> functionContext – recursively <foo> functionContext globalContext];
對於拋出未被catch的異常,將會導致從一個或者多個Context中退出。
四。Eval Code
eval 定義的變數和函數,影響的是調用該 eval的context,例如:
// influence global contexteval(‘var x = 10‘); (function foo() { // and here, variable "y" is // created in the local context // of "foo" function eval(‘var y = 20‘);})(); alert(x); // 10alert(y); // "y" is not defined
ECStack = [ globalContext]; // eval(‘var x = 10‘);ECStack.push({ context: evalContext, callingContext: globalContext}); // eval exited contextECStack.pop(); // foo funciton callECStack.push(<foo> functionContext); // eval(‘var y = 20‘);ECStack.push({ context: evalContext, callingContext: <foo> functionContext}); // return from eval ECStack.pop(); // return from fooECStack.pop();
Javascript學習-執行內容(Execution Contexts)