let命令
-
基本用法
let命令用于声明变量,类似于var,但是声明的变量只在let命令所在的代码块内有效。 -
不存在变量提升
var命令存在变量提升,即变量可以在声明之前使用,值为undefined。但在let命令中不存在变量提升,它所声明的变量一定要在声明后使用,否则报错。 -
暂时性死区
ES6规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前使用这些变量,就会报错。 -
不允许重复声明
let不允许在相同作用域内重复声明同一个变量。
const命令
- 基本用法
const声明一个只读的常量。一旦声明,常量的值就不能改变。
const声明的常量不得改变值。也就是说,const一旦声明常量,就必须立即初始化,不能留到以后赋值。
const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const命令声明的常量也不会提升,同样存在暂时性死区,只能在声明后使用。
使用const声明常量也与let一样,不可重复声明。
按照我的理解就是const命令声明一个不可变的常量,除此跟let命令没有多大区别。
- 本质
const 实质上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值)来说,值就保存在变量指向的内存地址中,因此等同于常量。但对于复合类型的数据(主要是对象和数组)来说,变量指向的内存地址保存的只是一个指针。const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这完全不能控制。因此,将一个对象声明为常量时必须非常小心。
知识来源阮一峰的《ES6标准入门》