-
let (定义变量)
-
代码块内有效
{ let a = 1 console.log(a) //1 } console.log(a) //ReferenceError: a is not defined
-
不能重复声明
-
不存在变量提升
-
-
const (定义常量)
- 一旦声明必须初始化
- 声明之后不允许改变
const如何做到声明初始化后不允许改变的?
保证变量指向的内存地址所保存的数据不允许改动,对于简单类型,值就保存在变量指向的那个内存地址,因此 const 声明的简单类型的变量等同于那个常量。而复杂类型、变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重
-
暂时性死区
代码块内如果存在 let 或则 const ,代码块会对这些命令的变量从块的开始形成一个封闭作用域。在声明变量 PI 之前使用它会报错
var PI = 'a' if(true){ console.log(PI)//ReferenceError: a is not defined const PI = '3.14' }