- 执行环境(Execution Context)分为全局执行环境和函数(局部)执行环境,定义了当前运行环境中变量或者函数能够访问的其他数据。通常,会有一个栈用于管理执行环境的切换;
- 每个EC对应有一个与之对应的变量对象(VO, Variable Object),在函数EC也称为AO(Active Object),保存了当前EC中定义的函数和变量;函数参数也会被当做变量对待;
- 作用域链是由一系列的变量对象组成,用于保障所有执行环境中的变量和函数能够有序访问。作用域链的前端始终是当前执行环境的VO,而末端总是全局EC的VO;每次进入一个新的EC,都会创建一个用于搜索变量和函数的作用域链;
- with语句和try-catch语句的catch块会在作用域链前端临时创建一个VO;with语句是将执行环境切换到指定对象,而catch创建出一个新的VO用于包含抛出的错误对象的声明;
- var声明的变量会被自动添加到最接近的环境中,意味着函数内部var变量会添加到函数的局部环境;with语句中,var变量会添加到包含它的函数环境;初始化未使用var,则将其添加到全局EC;
参考文献
《JavaScript高级程序设计》第三版