函数预编译过程
- 四部曲
- 创建一个AO(activation object:执行期上下文)对象;
- 找形参和变量声明,将形参和变量声明作为AO对象的属性,值为undefined;
- 将实参,形参相统一;
- 找函数体内部的函数声明;
function fn(a) {
console.log(a) // f a(){}
var a = 123
console.log(a) // 123
function a(){}
console.log(a) // 123
var b = function(){}
console.log(b) //f (){}
function b(){}
}
fn(1)
全局预编译过程
- 少掉四部曲中的第三步,AO变成GO
console.log(test) //1
function test(test){
console.log(test)//2
var test = 234
console.log(test) // 3
function test(){}
}
test(1)
var test = 123
// 1. ƒ test(test){
//console.log(test)
//var test = 234
//console.log(test)
//function test(){}
// }
// 2. ƒ test(){}
// 3. 234