发表于: 2017-06-04 02:49:33
1 1246
大家好,我是IT修真院北京分院第十九期的学员陈鹏康,一枚正直纯洁善良的WEB前端程序员。今天给大家分享一下JS中作用域和作用域链的概念。
一、背景介绍
作用域与作用域链是JS中非常重要的概念之一
学习作用域与作用域链对于深入了解JS的运行机制是一个很大的帮助。
二、知识剖析
1.
执行环境
执行环境决定了变量对象的行为。
2.
全局执行环境
全局执行环境被认为是window对象
3.
函数执行环境
每个函数都有自己的执行环境
执行流=>函数=>(函数的环境)=>环境栈=>环境栈将函数环境弹出=>函数
4.
当执行环境的所有代码执行完毕,该环境被销毁。
全局执行环境只有关闭网页或浏览器时才会被销毁。
5.
作用域链
代码在环境中执行,会创建变量对象的一个作用域链。
它的存在是为了让变量对象中的所有变量和函数有序的执行
6.
标识符解析
沿着作用域链一级一级的搜索标识符的过程。
三、常见问题
让我们用代码来形象演示一下上述的过程
四、解决方案
五、编码实战
六、拓展思考
1.延长作用域链
某些语句可以在作用域前端临时增加一个变量对象,在代码执行后会被移除
2.with语句
将指定的对象添加到作用域中
3.try-catch语句中的catch块
会创建一个新的变量对象
4.没有块级作用域
5. 声明变量
var 声明的变量会自动被添加到最接近的环境中
6.查询标识符
七、参考文献
javaScript高级程序设计
八、更多讨论
了解闭包的机制
评论