Skip to content

3. 作用域链

Ned2017 edited this page Jan 2, 2021 · 4 revisions

https://github.com/mqyqingfeng/Blog/issues/6

因为JS使用的是词法作用域,也就是静态作用域,所以函数的作用域在函数定义的时候就确定了。

当函数创建的时候,会保存所有的父变量对象到函数的内部属性[[scope]]中,不包括函数内部的作用域。

当函数激活(我理解为代码将要执行函数时,需要将其”激活“,来进行一些预处理,即创建执行上下文)时,会将活动对象添加到作用域链的顶端。

创建函数执行上下文时,会将函数[[scope]]属性复制到执行上下文对象中来创建作用域链,并初始化活动对象AO,随后将其压入到作用域链的顶端,至此作用域链创建完成Scope: [AO, [[Scope]]],之后开始执行函数。