js 变量提升

变量提升是什么

js 中的变量提升,其实是对变量的声明进行提升,也就是将变量的声明(不包括赋值)提升到其所在作用域的顶部。

全局作用域的变量提升

  • 使用 var 修饰的全局变量会被变量提升
  • 没有使用 var 修饰的全局变量不会被提升,变量必须在声明后才能使用,否则会报错
1
2
3
4
5
6
7
//使用 var 修饰的全局变量会被变量提升
function F1(){
console.log(gN1);
}
F1();//undefined,变量声明被提升,赋值没被提升,故输出为undefined
var gN1 = 1;
F1();//1
1
2
3
4
5
6
7
//没有使用var修饰的全局变量不会被提升,变量必须在声明后才能使用,否则会报错
function F1(){
console.log(gN1);
}
F1();//error: gN1 is not defined
gN1 = 1;
F1();//1

局部作用域的变量提升

  • 局部作用域的变量声明会被提升到作用域顶部
1
2
3
4
5
6
//局部作用域的变量声明会被提升
function F2(){
console.log(n1);//undefined
var n1 = 1;
}
F2();

块级作用域的变量提升

  • 块级作用域不会进行变量提升,变量的使用必须在声明之后,否则会报错
1
2
3
4
5
6
//块级作用域不会进行变量提示,变量的使用必须在声明之后,否则会报错
function F3(){
console.log(n3);//error: n3 is not defined
let n3 = 3;
}
F3();

总结

1、局部变量、使用 var 声明的全局变量 会被提升

2、块级变量、没有使用 var 声明的全局变量 不会被提升