js运行的三步
1.语法分析 2.预编译 3.解释执行
函数体的预编译
1、创建AO对象 Activation Object(执行期上下文)
2、找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3、将实参和形参统一
4、在函数体里面找到函数声明,值赋予函数体
全局预编译创建GO对象
函数声明整体提升
将函数声明提到逻辑的最前面,调用函数无论在上面调用还是在下面调用实际上都是在下面调用。
变量 声明提升
将变量的声明(不包括赋的值)提升到上面。
imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。
一切声明的全局变量,全是window的属性
window是全局的域