JS复习 -- 作用域链
2017-10-30 16:51
162 查看
作用域链属于执行上下文的属性之一。
咦?你问我执行上下文是什么:
当JS代码执行一段可执行代码的时候,就会创建对应的可执行上下文。每个执行上下文都有三个重要属性:
1、变量对象
2、作用域链(后面我们就会了解,作用域链其实就是变量对象组成的链)
3、this
好了,言归正传了。
当js执行过程中,需要查找一个变量的时候,会先从当前上下文的变量对象中查找。但是如果没找到,就会从词法层面上(一定注意这里是词法)的父级执行上下文变量中查找,一直找到全局为止。
这个!就是这个啦,由多个执行上下文的变量对象构成的链表就叫做作用域链。说白了就是查找对象的时候依次访问的的那个变量对象的链。
JS的函数有一个内部属性[[scope]],当创建函数的时候,这个属性就会保存所有父级的变量对象(VO)到其中。此时,[[scope]] 还并不是完整的作用域链。
至此,作用域链才算是创建完毕。
咦?你问我执行上下文是什么:
当JS代码执行一段可执行代码的时候,就会创建对应的可执行上下文。每个执行上下文都有三个重要属性:
1、变量对象
2、作用域链(后面我们就会了解,作用域链其实就是变量对象组成的链)
3、this
好了,言归正传了。
当js执行过程中,需要查找一个变量的时候,会先从当前上下文的变量对象中查找。但是如果没找到,就会从词法层面上(一定注意这里是词法)的父级执行上下文变量中查找,一直找到全局为止。
这个!就是这个啦,由多个执行上下文的变量对象构成的链表就叫做作用域链。说白了就是查找对象的时候依次访问的的那个变量对象的链。
函数创建
JS采用的是词法作用域而非动态作用域,也就是说,函数的作用域在函数定义的时候决定,而不是在运行的时候决定。JS的函数有一个内部属性[[scope]],当创建函数的时候,这个属性就会保存所有父级的变量对象(VO)到其中。此时,[[scope]] 还并不是完整的作用域链。
函数激活
当函数被激活,也就是代码执行过程中进入了函数上下文,此时会创建变量对象(在进入上下文的时候也称活动对象),然后将这个活动对象添加到作用域链的前面。Scope = [AO].concat([[Scope]]);
至此,作用域链才算是创建完毕。
相关文章推荐
- js复习笔记day5
- js复习笔记day7
- js复习笔记
- [置顶] 谈谈一道js笔试题,涉及作用域链、闭包
- JS学习笔记——作用域链
- js中操作dom的方法(复习)
- js 作用域和作用域链
- Js作用域与作用域链详解
- js通过沿着作用域链还是原型链查找变量
- 用JS封装AJAX请求 XMLHttpRequest (面试前记得复习)
- JS复习:第二十章
- js高级——作用域链
- JS基础复习
- [ JS 进阶 ] 闭包,作用域链,垃圾回收,内存泄露
- JS复习3
- js复习之数据类型转换
- js作用域,作用域链以及闭包
- js基础篇string&&array(应YX同学面试复习要求 - -)
- js-dom复习2
- 使用js实现显示和隐藏区域的内容(复习)