** 參考**
書籍:ECMAScript 6 入門
作者:阮一峰let
聲明的變量,只在let
命令所在的代碼塊內有效。不存在變量提升。
var
會發生變量提升現象,即變量可以在聲明之前使用,值為undefined
。暫時性死區(temporal dead zone,簡稱 TDZ)。只要塊級作用域內存在
let
命令,它所聲明的變量就“綁定”binding
這個區域,不再受外部的影響。暫時性死區也意味著typeof
不再是一個百分之百安全的操作。不允許重復聲明。
let
不允許在相同作用域內,重復聲明同一個變量。
- ES5 只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景。
第一種場景,內層變量可能會覆蓋外層變量。
第二種場景,用來計數的循環變量泄露為全局變量。
const
聲明一個只讀的常量。一旦聲明,常量的值就不能改變。這意味著,const
一旦聲明變量,就必須立即初始化,不能留到以后賦值。const
實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址不得改動。
對于簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,因此等同于常量。但對于復合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指針,const只能保證這個指針是固定的,至于它指向的數據結構是不是可變的,就完全不能控制了。