### let命令
#### let基本用法
ES6新增了 `let` 命令,用于声明变量, `let` 声明的变量只在其所在代码块内有效。
#### 不存在变量提升
`var` 会发生变量提升现象,即变量可以在声明之前使用,值为 `undefined`, `let` 命令声明的变量必须在声明之后才能使用,否则就会报错
#### 暂时性死区
ES6规定,如果区块中存在 `let` 和 `const` 命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。在代码块中,使用 `let` 命令声明变量之前,该变量都是不可用的,这在语法上称为"暂时性死区"
ES6规定暂时性死区和不存在变量提升的行为,主要是为了减少运行时错误,防止在变量声明前就使用这个变量
#### 不允许重复声明
`let` 不允许在相同作用域内重复声明同一个变量。
### 块级作用域
ES5只有全局作用域和函数作用域,没有块级作用域
#### ES6的块级作用域
`let` 实际上为JavaScript新增了块级作用域,且允许块级作用域的任意嵌套。
#### 块级作用域与函数声明
ES6引入了块级作用域,明确允许在块级作用域之中声明函数。ES6规定,在块级作用域之中,函数声明语句的行为类似于 `let` ,在块级作用域之外不可引用。
### const
#### const基本用法
`const` 声明一个只读的常量,一旦声明,常量的值就不能改变。
`cosnt` 一旦声明常量,就必须立即初始化,不能留到以后赋值。
`const` 的作用域与 `let` 命令相同:只在声明所在的块级作用域内有效。
`const` 命令的敞亮也不会提升,同样存在暂时性死区,只能在声明后使用。
#### ES6声明变量的6中方法
- `var` (ES5)
- `function` (ES5)
- `let`
- `const`
- `import`
- `class`