JavaScript中的作用域链(scope chain)

第一篇博客,略有手抖,不知道应该捡哪句说起。开博最重要的目的就是做一些自己的技术沉淀。之前不是不想开,是因为确实自己确实没有积累,即使勉强写出点什么,我想大抵也是东拼西凑吧,这样不如不干。


干,就像个样子。分隔符---此为前话。


近几日精读JavaScript高级程序设计,感觉收货颇丰。尤其读到第七章“函数表达式”,让我对JavaScript有了更深层次的认识。面试中出现频率较高的一个问题也许就包括:“请你谈谈对JS中作用域链的理解”。我敢说如果你没仔细拜读过尼古拉斯先生的JavaScript高级程序设计的话,必定懵逼,或是get不到重点。


所谓作用域链(scope chain),其实就是一个指针列表,这些指针指向的是每个函数在调用的时候都会产生的变量对象。对,就是对变量对象的引用。作用域链的产生过程是这样的:函数在创建的时候同时也会创建一个包含全局变量对象的作用域链,别急,这时候这个链子上只有一个全局变量对象。下一步,调用函数(不然创建函数干嘛~),此时会有相应的函数执行环境产生,理所当然地会产生一个该执行环境的变量对象(因为每个执行环境都有一个变量对象),那么它就会被当做活动对象被推入作用域链的前端。到这里,一个完整的作用域链产生了,它包含两个变量对象:本地活动对象和全局变量对象。
每个函数在执行时都会有一个执行环境,而每个执行环境中都有相应的变量对象,其实作用域链正是由这些变量对象连接得到。在搜索变量时,会沿着作用域链自下而上进行搜索,如果该变量存在于活动对象中则停止搜索,否则继续向上搜索,直至找到该变量。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值