var 的变量提升
var 定义的变量的定义时存在变量提升现象。
console.log(a); // undefined
var a = 10;
console.log(a); // 10
原理:
- js 引擎在渲染代码时,将变量声明部分和函数声明部分提升到函数的顶部,并赋值为undefined 。
- let/const 在声明时,也存在变量提升现象,但是会出现暂时性死区,在代码未执行到赋值语句时,调用变量会报错。
上述代码相当于
var a; // 未赋值默认为undfined
console.log(a);
a = 10;
console.log(a);
优先级
函数声明的优先级高于变量声明的优先级
fn();
var a = 10;
function fn() {
console.log(a); // undefined
}
console.log(a); // 10
由于函数声明提升优先级高于变量声明提升。
上述代码相当于:
function fn(){ // 函数声明优先高
console.log(a);
}
var a; // 变量声明优先级低
fn();
a = 10;
console.log(a);
其他:
- let/const 也存在变量提升,但是其设置暂时性死区,在未给变量赋值时访问会报错。