AO:函数预编译
function test(a,b){
console.log(a);
var c = 123;
console.log(c);
function a() {}; // 这个是函数声明
console.log(b);
var b = function c() {}; // 这个是函数表达式
console.log(b);
}
test(1,3);
打印结果
> ƒ a() {}
> 123
> 3
> ƒ c() {}
预编译流程
1.计算机执行函数前,会创建一个AO对象
AO{}
2.将函数内所有的形参和变量声明储存到AO对象中,value为undefined
AO{ a: undefined, b: undefined, c: undefined }
3.将形参和实参进行统一
AO{ a: 1, b: 3, c: undefined }
4.将所有的函数声明的函数名作为AO对象中的key,函数整体内容作为value,存储到AO对象中
AO{ a: function a() {}, b: 3, c: undefined }
GO:全局预编译
1.生成GO对象GO{},这个GO就是window
2.将全局的变量声明储存到GO对象中,value为undefinde
3.将全局的函数声明的函数名作为GO对象中的key,函数整体内容为value储存到GO对象中
网友评论