作用域与作用域链

前言:

每一个函数都是一个对象,对象有一些属性仅供javascript引擎存取,[[scope]] 就为其中一个隐形属性,我们称为作用域,存储了函数执行期上下文的集合,

总结:

  1. 执行期上下文:函数执行时,会创建一个被称为执行期上下文的内部对象(AO),每次执行都为一个独一的AO,执行完毕AO销毁
  2. 作用域:[[scope]],存储了函数执行期上下文的集合
  3. 作用域链:[[scope]]中存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这个称为作用域链
  4. 查找变量:从作用域链的顶端依次向下寻找

分析下面代码的作用域链

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

1.首先一个全局作用域

a 定义时,a.[[scope]]——> 0:GO{}

a执行时,a.[[scope]]——> 0:aAO{}

                                               1:GO{}

b 定义时,b.[[scope]]——> 0:aAO{}

                                                1:GO{}

b执行时,b.[[scope]]——> 0:bAO{}

                                                1:aAO{}

                                                2:GO{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值