Javascript学习-执行上下文(Execution Contexts)
2015-03-11 15:35
232 查看
一。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 foo ECStack = [ <foo> functionContext globalContext ]; // recursive activation of foo ECStack = [ <foo> functionContext – recursively <foo> functionContext globalContext ];
对于抛出未被catch的异常,将会导致从一个或者多个Context中退出。
四。Eval Code
eval 定义的变量和函数,影响的是调用该 eval的context,例如:// influence global context eval('var x = 10'); (function foo() { // and here, variable "y" is // created in the local context // of "foo" function eval('var y = 20'); })(); alert(x); // 10 alert(y); // "y" is not defined
ECStack = [ globalContext ];
// eval('var x = 10');
ECStack.push({
context: evalContext,
callingContext: globalContext
});
// eval exited context
ECStack.pop();
// foo funciton call
ECStack.push(<foo> functionContext);
// eval('var y = 20');
ECStack.push({
context: evalContext,
callingContext: <foo> functionContext
});
// return from eval
ECStack.pop();
// return from foo
ECStack.pop();
相关文章推荐
- 跟我学习javascript的执行上下文
- JavaScript学习--Item19 执行上下文(execution context)
- javascript 小白学习指南专题 -- 执行上下文 执行上下文栈
- 跟我学习javascript的执行上下文
- JavaScript中的执行上下文和堆栈
- 7.JavaScript深入之执行上下文
- 深入javascript之执行上下文
- 浅析JavaScript作用域链、执行上下文与闭包
- javascript中的执行上下文堆栈和执行上下文
- javascript-----执行上下文环境(二)
- 深入理解javascript之执行上下文(execution context)
- 了解JavaScript的执行上下文
- 深入理解javascript原型和闭包(8)——简述【执行上下文】上
- javascript执行上下文
- 深入理解javascript原型和闭包(8)——简述【执行上下文】上
- 深入理解javascript原型和闭包(11)——执行上下文栈
- 深入理解javascript 执行上下文
- 深入理解JavaScript 中的执行上下文和执行栈
- JavaScript内部原理系列-执行上下文(Execution Context)
- 深度理解javascript(8):执行上下文(上)