作用域 与 执行上下文

1,120 阅读1分钟

作用域与执行上下文的区别

区别一:

  • 全局执行上下文环境实在全局作用域确定之后,js代码马上执行之前创建[1]。
  • 函数执行上下文是在调用函数时(fn()),函数体代码执行之前创建。

区别二:

  • 除全局作用域之外,每个函数都会创建自己的函数作用域,作用域在函数定义时就已经确定了的,而不是在函数调用时
  • 作用域是静态的,只要函数定义好了就一直存在,且不会再发生变化。
  • 执行上下文是动态的,调用函数时(fn())创建,调用结束后自动释放

联系

  1. 上下文环境(对象)是从属于所在作用域的。
  2. 全局上下文环境(对象)对应全局作用域。
  3. 函数上下文环境(对象)对应函数作用域。

image.png

执行上下文生命周期

  1. 创建阶段[1]
    • 生成变量对象
      • 创建arguments
        • 扫描函数声明
        • 扫描变量声明
    • 立作用域链
    • 确定this的指向
  2. 执行阶段
    • 变量赋值
    • 函数的引用
    • 执行其他代码