执行环境
执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为
变量对象
-
执行环境定义的所有变量和函数都保存在这个对象中
-
我们编写的代码无法访问这个对象,但在解析器在处理数据时会在后台使用它
- 每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其换将弹出,把控制权返回给之前的执行环境
作用域链
产生
- 代码在一个环境中执行时,会创建变量对象的一个作用域链
用途
- 保证对执行环境有权访问的所有变量和函数的有序访问
说明
-
作用域链的前端(查找的开始),始终都是当前执行代码所在环境的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而在下一个变量对象则来自下一个包含环境。这样一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象
- 如果这个环境是函数,则将其活动对象作为变量对象,活动对象最开始时只包含一个变量即arguments对象(这个对象在全局环境中是不存在的)
活动对象
标识符解析
- 标识符解析是沿着作用域链一级一级地搜索标识符过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯,直至找到标识符为止(如果找不到标识符,通常会导致错误发生)