JS作用域(2)- 生成

本篇初步介绍作用域的概念及产生过程。

执行期上下文

上篇说了函数在执行的前一刻,会进行预编译过程,创建一个执行期上下文对象:AO或GO。它定义了函数执行期的环境,且每次调用都会产生一个新的执行期上下文对象,在函数调用结束后,该对象立马销毁。

作用域

每个函数对象都会有一个[[scope]]属性,该属性就是函数的作用域,它存储了执行期上下文的集合,该属性只能JavaScript引擎调用。

作用域链

[[scope]]中存储的执行期上下文集合呈链式结构,我们把这种结构叫做作用域链。

作用域的生成过程

我们通过如下的一个函数来分析函数作用域的生成过程。


首先,a函数在定义时,会生成如下作用域:


然后,执行a函数,生成如下作用域:


a函数执行时,b函数定义,b定义时,生成如下作用域,从图中可以看出,b在定义时的作用域直接指向a执行时生成的执行期上下文,它们共用相同的执行期上下文。


b函数执行时,生成如下的作用域:


当b执行完成后,b的作用域变回到b定义时的状态,同理,a执行完成后,a的作用域也变回到a定义时的状态。

通过作用域内部保存的作用域链,我们可以按照该链至顶向下查找变量(也即从函数内部向其外部查找)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,098评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,292评论 19 139
  • 毛凤霞~中国太平 【日精进打卡第103天】 【知~学习】学习新产品 【经典名句分享】 所有的努力,不是为...
    太平人寿毛毛阅读 119评论 0 0
  • 分离,只是时间开的一个不大不小的玩笑,时间会变,世界会变,转眼间沧海桑田,只有情义不变。 —...
    不谓阅读 278评论 0 3
  • 我最怕最怕的事就是关键时刻大姨妈来了,影响你的能力的发挥,今天朋友来看我,浑身难受都不想理,好在看了迷罗老师讲的痛...
    瑜伽之路阅读 1,213评论 0 1