1.变量声明提前:
console.log(n); //undefined
var n=10;
console.log(n); //10
2.函数声明提前:
function fun(){console.log(1)}
fun(); //2
function fun(){console.log(2)}
fun(); //2
解决方案:
相当于给fun赋值,hoist后面应该就是只有var fun;
3.综合示例:
修改前:
var n=10;
function fn(){
console.log(n); //undefined
var n=100;
console.log(n); //100
}
fn();
console.log(n); //10
修改后:
var n=10;
function fn(){
console.log(n); //10
/*var*/ n=100;
console.log(n); //100
}
fn();
console.log(n); //100
解决方案:
var n=10;
function fn(){
console.log(n); //报错
/*var*/let n=100; //用let代替var,目的是禁止在let前使用该变量
console.log(n);
}
fn();
console.log(n);