- let、const不能重复定义相同的变量
- let、const没有作用域提升,在变量被初始化之前不可被使用
- const是一个常量,本质是传递的值不可被修改,但如果传递的是一个引用,则可以根据引用修改属性的值
- let、const不会在window上添加任何属性
- let、const有块级作用域
对于let、const作用域提升的补充
根据ECMA标准,这些变量会被创建在包含他们的词法环境被实例化时,但是是不可以访问它们的,直到词法被绑定求值
也就是说,在执行上下文的词法环境创建出来的时候,变量实际上已经被创建出来了,但无法访问它们。
作用域提升:在声明变量的作用域中,如果这个变量在声明之前可以被访问,则称为作用域提升
但let、const虽然被创建出来了,却无法访问,所以不能称为作用域提升
对第四点的补充
在最新的ECMA标准中,VO变成了VE(变量环境),而VE指向的不是window,在V8中它指向的是variable_这是一个hashMap存放变量声明和环境记录,所以let、const声明的变量会存放在这里,而var也会存放在这里,但是window中也会有一份。(window对象是早期的GO对象,在最新的实现中其实是浏览器添加的全局对象,并且保持了window和var之间值的相等性)