作用域例题集

题1:

function a(){
	function b(){
		var b = 234;
	}
	var a = 123;
	b();
}
var glob = 100;
a();

预编译状态:
	a函数被定义时,发生如下过程:
	a defined a.[[scope]]  -- 	0:GO{a:(function),glob:100}
程序运行状态:
	a函数被执行时,发生如下过程:
	a handle  a.[[scope]]  -- 	0:aAO{b:(function),a:123}
								1:GO的引用
	b函数被定义时,发生如下过程:
	b defined a.[[scope]]  -- 	0:aAO的引用
								1:GO的引用
	b函数被执行时,发生如下过程:
	b handle  b.[[scope]]  -- 	0:bAO{b:234}
								1:aAO的引用
								2:GO的引用
	b函数被执行完,销毁b的执行上下文:
	b handle  b.[[scope]]  -- 	0:清空bAO的引用
								1:aAO的引用
								2:GO的引用
	a函数被执行完,销毁b的执行上下文:
	a handle  a.[[scope]]  -- 	0:清空bAO的引用(由于aAO{b:(function),a:123}中有存了b函数,因此b函数被销毁)
								1:GO的引用
预编译状态:
	程序结束,a函数回到被定义状态:
	a defined a.[[scope]]  -- 	0:GO{a:(function),glob:100}
	
问题一:
b函数执行时是把a函数AO的引用挂在及自己身上还是重新生成了
一个a函数AO
回答:b函数执行时是把a函数AO的引用挂在及自己身上

问题二:
是否有终点,生成的执行上下文会不会消失,因为我们所知道的一
个函数执行完后会销毁它的AO
回答:有终点,因为一个函数执行完后会销毁它的AO

题2:

function a(){
	function b(){
		function c(){
			
		}
		c();
	}
	b();
}
a();
执行过程:
a defined a.[[scope]] --> 	0:GO
a handle  a.[[scope]] --> 	0:aAO
							1:GO
b defined b.[[scope]] --> 	0:aAO
							1:GO
b handle  b.[[scope]] --> 	0:bAO
							1:aAO
							2:GO
c defined c.[[scope]] --> 	0:bAO
							1:aAO
							2:GO
c handle  c.[[scope]] --> 	0:cAO
							1:bAO
							2:aAO
							3:GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值