ES6新增的两个命令,用于声明变量,let类似于var,const用于声明常量。
一、let
1. let声明的变量只在所在的代码块内有效
{
let a = 10;
var b = 1
}
a // ReferenceError: a is not defined
b // 1
代码块外调用两个变量,let声明的变量报错
2. let声明的变量不存在变量提升
var声明的变量可以在声明前使用,值为undefined,这种现象称为“变量提升”。let命令改变了这种行为,let所声明的变量一定要在声明后使用,否则会报错
var声明的变量在脚本开始运行时就已存在,但是没有值,所以输出undefined
3. 暂时性死区(Temporal Dead Zone, TDZ)
ES6规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用这些变量,就会报错。
4.不允许重复声明
let不允许在相同作用域内声明同一个变量
二、const命令
const声明一个只读常量,一旦声明,常量的值就不能改变,这意味着const一旦声明常量,就必须立即初始化
const本质
const实际上保证的是变量指向的那个内存地址不得改动。
对于简单类型的数据(number、string、boolean)而言,值就保存在变量指向的内存地址中,因此等同于变量;对于复合类型的数据而言,变量指向的内存地址保存的只是一个指针,const只是保证这个指针是固定的,至于指向的数据结构是否可变,这完全不能控制。
三、运用场景
- let在for循环中的运用
变量i通过var声明,则i在全局范围内有效且只有一个变量i,每次循环,变量i的值都会发生改变。当调用函数的时候,console.log(i)中的i指向全局的i,导致运行时输出的是最后一轮的i值。