javascript 执行环境,变量对象,作用域链

执行环境

函数都会创建的执行环境,包括 变量对象,作用域链,上下文(this)。执行环境定义了变量或函数有权访问的其他数据。

变量对象(VO)

存储被定义在执行环境中的变量

变量对象内容包括:

  1. 函数的形参
  2. var声明的变量
  3. 函数声明(不包括函数表达式)

全局环境中的变量对象

是全局对象自己
全局对象在进入任何执行环境之前就已经创建了的对象

函数环境的变量对象

是活动对象(AO),在进入函数执行环境中被创建,它通过函数的arguments属性初始化

作用域链

  1. 一个执行环境的数据(变量、函数声明和函数形参)作为属性存储在变量对象中。
  2. 同时也知道,变量对象在每次进入环境时创建,并填入初始值,值的更新出现在代码执行阶段。

代码在一个环境中执行的时候,会创建变量对象的一个作用域链,作用域链的用途是保证对变量和函数的有序访问。

本质:是一个指向变量对象的指针列表,它只引用但不实际包含变量对象。

一个作用域链包括父级变量对象(作用域链的顶部)、函数自身变量和活动对象
当查找标识符的时候,会从作用域链的活动对象部分开始查找,然后(如果标识符没有在活动对象中找到)查找作用域链的顶部,循环往复,就像作用域链那样。

参考
http://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html

你可能感兴趣的:(javascript 执行环境,变量对象,作用域链)