[toc]
### 使用let聲明變量
1.?使用let聲明的變量不會掛載到全局對象,不會污染全局變量
2.?let聲明的變量,不允許在當前作用域內再次重復聲明。
3.?使用let聲明的變量不會再有變量提升,所以在聲明變量之前不能使用這個變量。
> ES6不僅引入了let關鍵字用來解決變量聲明的問題,同時還引入了塊級作用域的概念。
### 什么是塊級作用域
代碼執行過程中,遇到大括號時就會創建一個塊級作用域。當大括號的代碼執行結束后,塊級作用域自動銷毀。
在塊級作用域中用let定義的變量,在其作用域外不能訪問。(塊級作用域里面可以使用外面的變量,外面的不能使用塊級作用域里的變量)
塊級作用域與上級作用域或全局作用域有相同名稱的變量時,優先使用自己作用域內的變量。
### 關于let聲明循環變量相關知識
1.?在for循環中,使用let聲明的循環條件變量會進行特殊處理。每次執行循環體都會開啟一個新的作用域,并將當前的循環變量綁定到該作用域。相當于每次循環使用的是一個全新的循環變量。
2.?在循環中使用的let聲明的循環變量,在循環結束后會銷毀。
### 使用const聲明常量
1.?const和let在用法和作用域上幾乎相同。唯一的區別是const聲明的變量必須在聲明時賦值,且不可以重新賦值。
2.?通常const定義的變量一般是不可變的,例如const?PI?=?Math().PI;,所以將這種變量稱為常量。
### 常量聲明的相關細節
一、?常量聲明鎖定的是內存空間,并不鎖定內存空間中的地址指向的其它空間。就是說如果常量聲明的是一個絕對值,如一個數字,一個字符串等,那么其不可被重新賦值。如果聲明的是一個引用值,如一個對象,一個數組,那么該常量不可被重新賦值,但其對像內的屬性的值可以被更改。
二、?常量的命名:
1.?通常情況下,可以明確知道該值是不可變的,如圓周率等,**該常量名稱采用字母全部大寫,若由多個單詞組成,單詞間采用下劃線連接**。
2.?不確定是否可變的常量,還延用正常的定義習慣,采用小駝峰方式定義。
三、?在for循環中,循環變量不能使用常量來定義。但在for?in循環中可以使用const來定義循環變量。