jQuery源码笔记.jpg

JS预编译——AO对象、GO对象

2020-04-15  本文已影响0人  柠檬果然酸

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对象中

上一篇 下一篇

猜你喜欢

热点阅读