执行上下文
Q:是什么?
- A:评估和执行 JavaScript 代码的环境的抽象概念。
Q:有什么用?
- A:Javascript 代码在执行上下文中运行。
Q:有哪些类型?
- A:
- 全局执行上下文
- 函数执行上下文
- Eval 函数执行上下文
Q:怎么创建执行上下文?
- A:两个阶段
- 创建:
-
this 值的决定,即我们所熟知的 This 绑定。
类型 this
的值全局执行上下文 指向全局对象。(在浏览器中, this
引用 Window 对象)。函数执行上下文 取决于该函数是如何被调用
* 被一个引用对象调用==>this
会被设置成那个对象
* 否则this
的值被设置为全局对象或者undefined
(在严格模式下) -
创建词法环境组件。
-
创建变量环境组件。
-
- 执行:完成所有变量的分配,最后执行代码。
- 如果 JavaScript 引擎不能在源码中声明的实际位置找到
let
变量的值,它会被赋值为undefined
。
- 如果 JavaScript 引擎不能在源码中声明的实际位置找到
- 创建:
全局执行上下文
Q:是什么?
- A:默认(基础)的上下文,任何不在函数内部的代码都在全局上下文中,一个程序中只会有一个全局执行上下文。。
Q:干什么?
- A:
- 创建一个全局的 window 对象(浏览器的情况下)。
- 设置
this
的值等于这个全局对象。
函数执行上下文
Q:是什么?
- A:函数被调用时, 创建的上下文。函数上下文可以有任意多个。每个函数都有它自己的执行上下文。
Eval函数执行上下文
Q:是什么?
- A:执行在
eval
函数内部,创建的上下文。
词法环境
Q:是什么?
- A:是一种持有标识符—变量映射的结构
- 标识符:变量/函数的名字
- 变量:对实际对象[包含函数类型对象]或原始数据的引用)
Q:内部构成是什么?
- A:内部有两个组件
- 环境记录器:用于存储变量和函数声明的实际位置
- 外部环境的引用:用于可以访问其父 级词法环境(作用域)
Q:类型有哪些?
- A:
- 全局环境:
- 函数环境: