变量提升
var 存在变量提升的问题。
什么是变量提升呢?
比如下面这段代码:
console.log(a);
var a = 2;
很明显,a 的定义在打印输出之后,但是并不会报错,因为上面代码将会进行变量提升,成为下面的代码:
var a;
console.log(a);
a = 2;
这就是变量提升。
let
- let 声明变量,没有变量提升;
- let 是一个块作用域;
//当b在if块中声明时,将不会像var一样被提升到块外,let声明的变量只能在块内访问
if(1 == 1) {
let b = 10;
}
console.log(b); //报错:b is not defined
- 在同一个作用域下,不能重复声明;
var a = 1;
var a = 2; //不会报错
let b = 1;
let b = 2; //报错:Identifier 'b' has already been declared
const
const 拥有 let 的以上特性,额外的一条特性是:
const 修饰的变量不能进行修改。
注意:const修饰的对象地址不能改变,但对象的属性可以改变,相当于java中的static final;js中的数组也是对象。
let 和 const 的使用建议
建议:在默认情况下使用 const,只有在你知道变量值需要被修改时使用 let。