更新时间:2018年09月21日17时19分 来源:传智播客 浏览次数:
| 
	 1 
	 | 
	
	ECStack = []; | 
	
| 
	 1 
	2 
	3 
	 | 
	
	ECStack = [  globalContext]; | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	 | 
	
	(function  foo(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');(function foo() {  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 
	 | 
	
	function foo() {  var x = 1;  return function () { alert(x); };}; var bar = foo(); bar(); // 1 eval('x = 2', bar); // 传入上下文,影响了内部的var x 变量 bar(); // 2 |