执行上下文
介绍
- 执行上下文是指js引擎在解析js代码片段的时候回做一些准备工作,称为执行上下文(execution context),也叫执行环境。可以理解为一个对象
作用
- 变量定义、作用域链的扩展、提供调用者的对象引用等
分类
- 全局上下文
- 函数/局部上下文:函数调用时创建
- Eval上下文
EC 包含
- thisBinding 调用提供者的对象
- LexicalEnvironment Component (词法环境组件)
- VariableEnvironment Component (变量环境组件)
thisBinding
- 确定this, this在调用时的时候确定,定义的时候不能确定
LexicalEnvironment
- 包含环境记录: 存储定义的变量,arguments对象,外部执行环境的引用
VariableEnvironment
- 是LexicalEnvironment,区别是var声明的变量存储在其环境记录中
GlobalExectionContext = { // 全局执行上下文
LexicalEnvironment: { // 词法环境
EnvironmentRecord: { // 环境记录
Type: "Object", // 全局环境
// 标识符绑定在这里
// 标识符绑定在这里
a: < uninitialized >,
b: < uninitialized >,
multiply: < func > ,
outer: <null> // 对外部环境的引用
},
VariableEnvironment: {
// ... 包含LexicalEnvironment
d: undefined
}
}
FunctionExectionContext = { // 函数执行上下文
LexicalEnvironment: { // 词法环境
EnvironmentRecord: { // 环境记录
Type: "Declarative", // 函数环境
// 标识符绑定在这里 // 对外部环境的引用
outer: <Global or outer function environment reference>,
Arguments: { 0: 1, 1: 2, length: 2 },
func: [function fn],
a: in
}
}