作用域 VS 执行上下文

我们讲过 作用域执行上下文,也在文章中对各自进行过解释。如作用域是词法作用域,在那里定义就在那里确定作用域;执行上下文与调用相关...

这里笔者想对两者进行对比及梳理

  • 作用域与在那里定义有关,执行上下文与调用有关;
    • 作用域在函数定义时就确定了
    • 执行上下文取决函数调用时的各种条件
  • 作用域是静态的(词法作用域),执行上下文是动态的;
  • 执行上下文的生命周期分两个阶段
    • 创建阶段
      • 确定 this 值,即我们熟知的 this 绑定
      • 创建变量环境
        • 环境记录器
          • 登记 var、function 等变量
          • 会发生变量提升和函数提升
        • 对外部环境的引用(outer)
          • 指向父作用域
      • 创建词法环境
        • 环境记录器
          • 登记 let、const 等变量
        • 对外部环境的引用(outer)
          • 指向父作用域
    • 执行阶段
      • 指向代码
      • 确定作用域链

不同版本的 ECMAScript

ES3的执行上下文

  • 变量对象(VO)
  • 作用域链(Scope chain)
  • this

ES5的执行上下文

  • 变量环境
    • 变量
    • outer
  • 词法环境
    • 变量
    • outer
  • this
Last Updated:
Contributors: johan