预编译是在代码执行前的准备工作。预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译。只有在解释执行阶段才会进行变量初始化
预编译(函数执行前): 1.初始化全局对象,空对象 2.全局作用与下 函数声明提升。 3.全局作用有下 变量声明提升 4.给提升的函数赋值 function
预编译(函数执行): 1:初始化Active Objec (AO) 对象 2: 提升形参 3:提升函数 4:提升变量 5.给提升函数赋值 6: 形参实参相统一 如下例:
var a = 123;
var b = 1;
function foo(){
var b = 12;
bar()
}
function bar(){
console.log(a + b);
}
foo(); //124
结果输出为124