let
关键字let用于声明变量
与关键字var的区别:
1.不会隐式提前变量,在没有声明变量前访问变量会报错;
2.let声明的变量只在let命令所在的代码块内有效,具有作用域,声明的变量只在最靠近的一个代码块中(花括号内)有效。推荐在函数中使用let定义变量,而非var;
3.同一个作用域中let声明的变量名不能重名
const
const和let的用法相同:声明的变量不会隐式提升,声明的变量只在最靠近的一个代码块中(花括号内)有效,同一个作用域中声明的变量名不能重名。
但const区别在于声明一个只读变量,声明之后不允许改变。即const一旦声明必须初始化,否则会报错。
const声明引用数据的注意点
const声明的变量保存引用数据时,可以用变量操作这个数据容器中的数据,但是不能用变量直接修改数据容器的引用。
let和const有暂时性死区
1. `var tmp = 123;`
1. ``
1. `if (true) {`
1. `tmp = 'abc'; // ReferenceError`
1. `let tmp;`
1. `}`
代码块内如果存在let或者const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。let和const声明变量之前,直接对变量赋值会报错。所以这里并不会访问全局变量而是报错。凡是在声明之前就使用这些变量,就会报错。