### 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`