js预编译
通篇扫描,基本的语法检测 例如:单词拼写错误,中文没有注释等等。没有问题开始进行全局预编译
全局预编译
特点:在全局作用域下声明的变量,会被提升到脚本块的顶部,并且会成为window对象的属性
- 会隐式生成一个(Gloabl Object) GO对象
- 分析var变量声明,如果变量在GO对象中不存在,直接将变量名作为AO对象的属性名,值为undefined,如果已经存在,不做任何改变
- 分析function函数,将函数名作为GO对象的属性名,值为函数体,如果已存在,直接覆盖
- 随后逐行执行,根据预编译产生出来的对象进行逐行执行
碰到函数被调用时进入函数进行函数预编译
函数预编译
- 函数在执行前的一瞬间,会隐式生成一个AO(active object 活动对象)对象
- 分析参数,形参作为AO对象的属性名,实参作为AO对象的属性值
- 分析var声明,变量名作为AO对象的属性名,值为undefined,如果遇到同名,不会对AO对象做任何改变
- 分析函数声明,函数名作为AO对象的属性名,值为函数体,如果遇到同名,直接以函数声明为主,直接覆盖
- 随后逐行执行,根据预编译产生出来的对象进行逐行执行
在进行预编译的时候 只需要去管函数 if判断中的声明(变量声明及函数声明都得正常分析)if条件决定是后面的执行过程