Skip to main content

执行上下文

Q:是什么?

  • A:评估和执行 JavaScript 代码的环境的抽象概念。

Q:有什么用?

  • A:Javascript 代码在执行上下文中运行。

Q:有哪些类型?

  • A:
  1. 全局执行上下文
  2. 函数执行上下文
  3. Eval 函数执行上下文

Q:怎么创建执行上下文?

  • A:两个阶段
    1. 创建:
      1. this 值的决定,即我们所熟知的 This 绑定

        类型this 的值
        全局执行上下文指向全局对象。(在浏览器中,this引用 Window 对象)。
        函数执行上下文取决于该函数是如何被调用
        * 被一个引用对象调用==> this 会被设置成那个对象
        * 否则 this 的值被设置为全局对象或者 undefined(在严格模式下)
      2. 创建词法环境组件。

      3. 创建变量环境组件。

    2. 执行:完成所有变量的分配,最后执行代码。
      • 如果 JavaScript 引擎不能在源码中声明的实际位置找到 let 变量的值,它会被赋值为 undefined

全局执行上下文

Q:是什么?

  • A:默认(基础)的上下文,任何不在函数内部的代码都在全局上下文中,一个程序中只会有一个全局执行上下文。。

Q:干什么?

  • A:
    1. 创建一个全局的 window 对象(浏览器的情况下)。
    2. 设置 this 的值等于这个全局对象。

函数执行上下文

Q:是什么?

  • A:函数被调用时, 创建的上下文。函数上下文可以有任意多个。每个函数都有它自己的执行上下文。

Eval函数执行上下文

Q:是什么?

  • A:执行在 eval 函数内部,创建的上下文。

词法环境

Q:是什么?

  • A:是一种持有标识符—变量映射的结构
    • 标识符:变量/函数的名字
    • 变量:对实际对象[包含函数类型对象]或原始数据的引用)

Q:内部构成是什么?

  • A:内部有两个组件
    1. 环境记录器:用于存储变量和函数声明的实际位置
    2. 外部环境的引用:用于可以访问其父级词法环境(作用域)

Q:类型有哪些?

  • A:
    1. 全局环境:
    2. 函数环境: