js作用域链
首先介绍几个概念:
变量对象:执行环境定义的所有变量和函数都保存在这个对象中。
执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。
作用域链:当代码在环境中执行,会创建变量对象的一个作用域链。作用是对执行环境有权访问的所有变量和函数的有序访问。
作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即 arguments 对象
|
|
注意:1、内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数
2、环境之间的联系是线性、有次序的。每个环境都可以向上搜索作用域链,以查询变量和函数名