es6中新增加的二种声明变量的方式,可以解决以前var的一些问题
var的特点
1.可以重复声明
var a = 'x';
var a = 'y';
console.log(a); // y
2.不可以定义常量
例如圆周率里的PI,这写属于常量不能用var,需要使用const
3.不支持块儿级作用域
if( true ) {
var a = 10;
}
console.log(a);//10
我们从打括号外面依然可以输出 a 的值。
let 的特点
1.支持块儿级作用域,这里可以对比var来进行理解
if( true ) {
let a = 10;
console.log(a);//10
}
console.log(a); //a is not defined
可以看到在打括号内我们可以拿到let声明的变量 a ,但是在外层就拿不到了。
- let 没有预解释
我们知道var是有预解释的,比如
console.log(x); //这里不会报错而是'undefined'
var x = 12;
然后我们把var改成let试一下
console.log(x); //Identifier 'x' has already been declared
let x = 12;
let a = 20;
{
console.log(a);//a is not defined
let a = 10;
}
const 的特点
用来声明常量
const PI = 3.14;
PI = 3.15;
console.log(PI); // Assignment to constant variable.
💡虽然说常量不能再引用别的对象了,但是它的值如果是一个引用类型的话,引用对象的属性还是可以改的
例如:下面的这种方法是可以更改的
const USER = {name:'lmx'};
USER.name= 'lmx2';