更新时间:2018年09月21日17时19分 来源:传智播客 浏览次数:
| 1 | ECStack = []; | 
| 1 2 3 | ECStack = [  globalContext]; | 
| 1 2 3 4 5 6 | (functionfoo(bar) {  if(bar) {    return;  }  foo(true);})(); | 
| 01 02 03 04 05 06 07 08 09 10 11 12 | // 第一次foo的激活调用ECStack = [  <foo> functionContext  globalContext];// foo的递归激活调用ECStack = [  <foo> functionContext – recursively  <foo> functionContext  globalContext]; | 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | eval('var x = 10');(functionfoo() {  eval('var y = 20');})();alert(x); // 10alert(y); // "y" 提示没有声明ECStack的变化过程:ECStack = [  globalContext];// eval('var x = 10');ECStack.push(  evalContext,  callingContext: globalContext);// eval exited contextECStack.pop();// foo funciton callECStack.push(<foo> functionContext);// eval('var y = 20');ECStack.push(  evalContext,  callingContext: <foo> functionContext);// return from evalECStack.pop();// return from fooECStack.pop(); | 
| 01 02 03 04 05 06 07 08 09 10 11 12 | functionfoo() {  varx = 1;  returnfunction() { alert(x); };}; varbar = foo(); bar(); // 1 eval('x = 2', bar); // 传入上下文,影响了内部的var x 变量 bar(); // 2 |