JavaScript 作用域、作用域链.md
作用域、作用域链
概念
域
域:指的是“范围,区域”。怎么理解呢?在漫画《海贼王》中,劳的 room 可以操作某一个空间范围的物体转移,但是在 room 以外是不可以的。
在 JavaScript 中, 作用域分为全局作用域和局部作用域。
作用域链
在 JavaScript 中, 函数存在一个隐式属性[[scopes]]
,这个属性用来保存当前函数在执行时的环境(上下文), 由于在数据结构上是链式的, 也被称为作用域链. 我们可以把它理解成一个数组。
1 | function a() {} |
[[scopes]]属性需要注意:
- [[scopes]]属性在函数声明时产生, 在函数被调用时更新
- [[scopes]]属性记录当前函数的执行环境
[[scopes]]属性是一个数组的形式
0: 是函数b的AO对象
1: 是GO对象
作用
在访问变量或者函数时, 会在作用域链上依次查找。通过这种特性,内部函数可以使用外部函数的变量,外部函数不能使用内部函数的变量。
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LT的编程笔记!