相同点:
1,不存在提前声明
2,声明只在块级作用域有效
3,存在暂时性死区
4,不可重复声明
不同点:
1,let声明的是变量,可以改变,值和类型都可以改变;const声明的是可读的常量,一旦声明不可改变。
2,const总是指向一个固定的地址
const foo = {};
// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123
// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only
上面代码中,常量foo
储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo
指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。
——引用来自阮一峰《ECMAScript 6 入门》