func1(); //lastfunctionfunc1(){
console.log('This is first func1');
}
func1(); //lastfunctionfunc1(){
console.log('This is last func1');
}
提升后的代码模拟
functionfunc1(){
console.log('This is first func1');
}//该函数被后一个覆盖。functionfunc1(){
console.log('This is last func1');
}
func1(); //最终打印的都是last
func1(); //最终打印的都是last
变量和函数同名
在提升的时候,如果有变量和函数同名,会忽略掉变量,只提升函数
alert(foo); //undefined 函数体functionfoo(){}
var foo = 2;
alert(foo); //2
Js代码分为两个执行步骤1.预解析提升(hoisting)JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作2.执行变量的提升 alert(a); var a = 1;提升后的代码模拟var a;alert(a);a=1;函数同名,如何提升?在预处理阶段会将两个函数同时提升,但后来的会覆盖前面的 func1(); //