您的位置:首页 > Web前端 > JavaScript

JS复习 -- 作用域链

2017-10-30 16:51 162 查看
作用域链属于执行上下文的属性之一。

咦?你问我执行上下文是什么:

当JS代码执行一段可执行代码的时候,就会创建对应的可执行上下文。每个执行上下文都有三个重要属性:

1、变量对象

2、作用域链(后面我们就会了解,作用域链其实就是变量对象组成的链)

3、this

好了,言归正传了。

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

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

函数创建

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

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

函数激活

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

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


至此,作用域链才算是创建完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 作用域链