2 function 关键字对变量进行变量提升,既会把变量提前声明,又会把变量提前赋值,也就是把整个函数体提升到代码的顶部
3 有一些代码是不会执行的但是仍旧会发生变量提升,规则适用于 1,2
3.1 return 之后的代码依旧会发生变量提升,规则适用于 1,2
3.2 代码报错之后的代码依旧会发生变量提升,规则适用于 1,2
3.3 break 之后的代码依旧会发生变量提升,规则适用于 1,2
4 有一些代码是不会执行但是仍旧会发生变量提升,但是规则要发生变化
4.1 if 判断语句 if 判断语句中 var 关键字以及 function 关键字声明的变量只会发生提前声明,不会发生提前赋值,也就是不会吧函数体整体提升到当前作用域顶部。规则跟 1,2 不适用
4.2 switch case 规则跟 1,2 不适用
4.3 do while 规则跟 1,2 不适用
4.4 try catch catch 中声明的变量只会发生提前声明,不会发生提前赋值。
Ps:在条件判断语句和 try catch 中的声明的变量不管是否能够执行,都只会发生提前
声明,不会发生提前赋值。
解析:
// 如果一个变量声明了但是未赋值,那么输出这个变量就会输出 undefinedvar num;
console.log(num);
// 如果一个变量没有声明也没有赋值,那么就会报一个错:console.log(num); // 输出一个不存在的变量 Uncaught ReferenceError: num is not defined
// var 关键字进行的变量提升console.log(num);
var num =123;
console.log(num);
var num =456;
console.log(num);
// 变量提升之后的代码:var num;
console.log(num);
num =123;
console.log(num);
num =456;
console.log(num);