1、let不存在變量提升
2、暫時性死區
只要塊級作用域內存在let命令,它所聲明的變量就“綁定”(binding)這個區域,不再受外部的影響。
3、不允許重複聲明
4、塊級作用域
ES5 只有全局作用域和函數作用域,沒有塊級作用域
問題:
(1)內層變量可能會覆蓋外層變量
(2)用來計數的循環變量泄露爲全局變量
塊級作用域的出現,實際上使得獲得廣泛應用的匿名立即執行函數表達式(匿名 IIFE)不再必要了。
// IIFE 寫法
(function () {
var tmp = ...;
...
}());
// 塊級作用域寫法
{
let tmp = ...;
...
}
ES6 的塊級作用域必須有大括號,如果沒有大括號,JavaScript 引擎就認爲不存在塊級作用域。
5、const
const實際上保證的並不是變量的值不得改動,而是變量指向的哪個內存地址所報錯的數據不得改動。對於簡單類型的數據,等同於常量。但對於複合型數據,const只能保證指針是固定的,至於它指向的數據結構是不是可變,就完全不能控制了。
6、ES6六種聲明變量的方法
var、function、let、const、import、class
7、
var命令和function命令聲明的全局變量,依舊是頂層對象的屬性;另一方面規定,let命令、const命令、class命令聲明的全局變量,不屬於頂層對象的屬性。