执行期上下文
当函数开始执行前一刻,会做一些准备工作,先创建一个称为执行期上下文的内部对象
执行期上下文定义了函数执行时的环境
多次调用一个函数会创建多个执行期上下文,函数执行完毕即销毁
运行三部曲
JavaScript 单线程的解释性语言
- 语法分析
- 预编译
- 解释执行
预编译四部曲
- 创建 AO — Activation Object 对象,即执行期上下文
- 寻找形参和变量声明,将变量和形参都作为 AO 的属性名,值设为 undefined
- 形参实参相统一
- 在函数体中寻找函数声明,赋给函数体
// 分析 fun1 函数的执行期上下文
function fn(a) {
console.log(a);
var a = 123;
console.log(a);
function a() { }
console.log(a);
var b = function () {}
console.log(b);
function d() {}
}
fn(1);
- 首先是创建 AO 对象
- 形参 a、b 置入 AO ,值为 undefined
AO {
a: undefined
b: undefined
} - 形参实参相统一
AO {
a: 1
b: undefined
} - 函数体赋给变量
AO {
a: function a() { }
b: undefined
d: function d() { }
} - 函数开始顺序执行
打印 a 为 a() { }
a 赋值为 123
打印 a 为 123
函数定义已提升略过
打印 a 为 123
b 赋值为 function () {}
打印 b 为 function () {}