首先要了解一下js中的预编译是什么意思
js代码运行时会经历这三步:
1.语法分析:语法中有没有报错的地方,如果有则不继续执行
2.预编译:
变量提升:(var a=10;其中包含两步 var=a,a=10 声明提升,但赋值并不会提升)
3.解释执行
预编译分为两种:全局预编译 和 局部预编译
全局预编译的3个步骤:
1:创建GO对象(Global Object)全局对象。
2:找变量声明,将变量名作为GO属性名,值为undefined
3:查找函数声明,作为GO属性,值赋予函数体
注:如果有变量名和函数名一样,则先赋值为undefind,再赋值为函数体
局部预编译的4个步骤:
1.创建AO对象(Activation Object)执行期上下文。
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参值和形参统一。
4.在函数体里面找函数声明,值赋予函数体。