作用域 VS 执行上下文
我们讲过 作用域 、执行上下文,也在文章中对各自进行过解释。如作用域是词法作用域,在那里定义就在那里确定作用域;执行上下文与调用相关...
这里笔者想对两者进行对比及梳理
- 作用域与在那里定义有关,执行上下文与调用有关;
- 作用域在函数定义时就确定了
- 执行上下文取决函数调用时的各种条件
- 作用域是静态的(词法作用域),执行上下文是动态的;
- 执行上下文的生命周期分两个阶段
- 创建阶段
- 确定 this 值,即我们熟知的 this 绑定
- 创建变量环境
- 环境记录器
- 登记 var、function 等变量
- 会发生变量提升和函数提升
- 对外部环境的引用(outer)
- 指向父作用域
- 环境记录器
- 创建词法环境
- 环境记录器
- 登记 let、const 等变量
- 对外部环境的引用(outer)
- 指向父作用域
- 环境记录器
- 执行阶段
- 指向代码
- 确定作用域链
- 创建阶段
不同版本的 ECMAScript
ES3的执行上下文
- 变量对象(VO)
- 作用域链(Scope chain)
- this
ES5的执行上下文
- 变量环境
- 变量
- outer
- 词法环境
- 变量
- outer
- this