1. 塊級作用域: 塊作用域由 { }包括,let和const具有塊級作用域,var不存在塊級作用域。
塊級作用域解決了ES5中的兩個問題:
內層變量可能覆蓋外層變量用來計數的循環變量泄露為全局變量
2. 變量提升: var存在變量提升,let和const不存在變量提升,即在變量只能在聲明之后使用,否在會報錯。
3. 給全局添加屬性: 瀏覽器的全局對象是window,Node的全局對象是global。var聲明的變量為全局變量,并且會將該變量添加為全局對象的屬性,但是let和const不會。
4. 重復聲明: var聲明變量時,可以重復聲明變量,后聲明的同名變量會覆蓋之前聲明的遍歷。const和let不允許重復聲明變量。
5. 暫時性死區: 在使用let、const命令聲明變量之前,該變量都是不可用的。這在語法上,稱為暫時性死區。使用var聲明的變量不存在暫時性死區。
6. 初始值設置: 在變量聲明時,var 和 let 可以不用設置初始值。而const聲明變量必須設置初始值。
7. 指針指向: let和const都是ES6新增的用于創建變量的語法。 let創建的變量是可以更改指針指向(可以重新賦值)。但const聲明的變量是不允許改變指針的指向。