ES6
let
1.变量不可重复声明(var可以)
let a= '1'
let a= '2'
2.块级作用域 全局,函数,eval
3.不存在变量提升
console.log(count) //ReferenceError: Cannot access uninitialized variable.
let count = 1
4.不影响作用域链
const
1. 一定要赋初始值
const a ; // => const a = 0;
2. 一般常量使用大写(潜规则,小写也可)
3. 常量的值不可修改
4. 也是块级作用域
5. 对于数组和对象的元素修改,不算做对常量的修改,不会报错
const LOL = ['UZI','Ming','Letme']
LOL.push('LXT') // ['UZI', 'Ming', 'Letme', 'LXT']
const 指针指向的地址不可以改变,指向地址的内容是可以改变的。因为const只是保证对象的指针不改变,而对象的内容改变不会影响到指针的改变,所以对象的属性内容是可以修改的。
1、修改对象的属性值是允许的
2、修改常量的值会报错...
const 为什么复杂类型可以更改
const 实质上保证的:
不是变量值不得改动、而是变量指向的那个内存地址所保存的数据不得改动,对于简单数据类型 值就保存在变量指向的内存地址,对于复合类型 也叫引用类型(多用于 对象和 数组)变量指向的内存地址,保存的只是一个实际数据的指针、const 保证只是这个指针是固定的。
它指向的数据结构 是不是可变的 就不受控制了。