javascript作用域链结合题目精讲

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

函数是一个特殊的对象,在函数声明的时候已经产生属性其中包括[[scope]],[[scope]]是作用域链,里面存放的是执行期上下文对象(AO,GO)的集合

铺垫完成,看题目function a(){}函数声明产生[[scope]]此时里面存放的是执行期上下文对象GO
GO{
glob : 100,
a : function a(){}
}
当执行语句执行到a();之前发生预编译产生执行期上下文AO
AO{
a : 123,
b : function b(){}
}
存放到由function a(){}函数声明产生[[scope]]中,此时[[scope]]中的排序是先AO再GO

function b(){}函数声明产生[[scope]]此时里面存放的是执行期上下文对象AO GO
AO{
a : 123,
b : function b(){}
}
GO{
glob : 100,
a : function a(){}
}
当执行语句执行到b();之前发生预编译产生执行期上下文AO
AO{
b : 234,

存放到由function b(){}函数声明产生[[scope]]中,此时[[scope]]中的排序是先AO先AO再GO且第二个AO和当执行语句执行到b();之前发生预编译产生执行期上下文AO是同一个AO,可以相互影响

我们重新看下概念[[scope]]是作用域链,里面存放的是执行期上下文对象(AO,GO)的集合
这样的先AO先AO再GO就是执行期上下文对象(AO,GO)的集合也是作用域链的体现

当执行完b();由预编译产生执行期上下文AO被销毁
只剩下AOGO
当执行完a();由预编译产生执行期上下文AO被销毁
只剩下GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值