JS复习 -- 作用域链

作用域链属于执行上下文的属性之一。

咦?你问我执行上下文是什么:
当JS代码执行一段可执行代码的时候,就会创建对应的可执行上下文。每个执行上下文都有三个重要属性:
1、变量对象
2、作用域链(后面我们就会了解,作用域链其实就是变量对象组成的链)
3、this

好了,言归正传了。

当js执行过程中,需要查找一个变量的时候,会先从当前上下文的变量对象中查找。但是如果没找到,就会从词法层面上(一定注意这里是词法)的父级执行上下文变量中查找,一直找到全局为止。

这个!就是这个啦,由多个执行上下文的变量对象构成的链表就叫做作用域链。说白了就是查找对象的时候依次访问的的那个变量对象的链。

函数创建

JS采用的是词法作用域而非动态作用域,也就是说,函数的作用域在函数定义的时候决定,而不是在运行的时候决定。

JS的函数有一个内部属性[[scope]],当创建函数的时候,这个属性就会保存所有父级的变量对象(VO)到其中。此时,[[scope]] 还并不是完整的作用域链。

函数激活

当函数被激活,也就是代码执行过程中进入了函数上下文,此时会创建变量对象(在进入上下文的时候也称活动对象),然后将这个活动对象添加到作用域链的前面。

Scope = [AO].concat([[Scope]]);

至此,作用域链才算是创建完毕。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值