函数声明提升
函数声明提升是一种整体提升,它会把函数声明和函数一起提升到前面
变量声明提升
变量声明提升是一种局部提升,它仅仅将变量的声明提前了,但是并没有将赋值一起提升
JS运行三部曲
1.语法解析
2.预编译
3.解释执行
预编译前奏
imply global
1.暗示全局变量,如果任何变量未经声明就赋值使用,此变量归window所有,并且成为window对象的一个属性
2.一切声明的全局变量,都是window属性
3.未经声明的全局变量可以用delete操作来删除
4.函数在执行前一刻产生一个执行期上下文,Activeaction Object对象
4.这个对象是空的,但是里面有一些看不见的隐式属性: this.window属性和arguments[]属性
预编译四步
1.创建AO对象
2.寻找形参和变量声明并当做属性名添加到AO对象中,值为undefined
3.将实参和形参相统一
4.在函数体里寻找函数声明,将函数名当做属性名,值为这个函数的函数体
function test(a,b){
console.log(a); // function a() {}
function a() {};
a = 222;
console.log(a); // 222
function b() {};
console.log(b); // function b(){}
var b = 111;
var a;
}
test();