在JavaScript中,常見的聲明變量的方式有var、let、const;其中,let和const是ES6中出現的新的聲明變量的方式。
1、let
let
用來聲明變量,用法類似於 var
,只不過使用let
聲明的變量,只在其所在的塊級作用域中有效,在該作用域之外無效;
let
聲明的變量在一個作用域中只能聲明一次,如果重複聲明多次,會報錯如下:Uncaught SyntaxError: Identifier 'a' has already been declared
;
let
不能在函數中重新聲明參數
2、const
const
聲明的是一個只讀的常量,一旦聲明,值將無法改變;
對於const
來說,只聲明不賦值就會報錯;const
聲明變量之後必須立即初始化;如果不初始化,即會出現如下錯誤:Uncaught SyntaxError: Missing initializer in const declaration
;
const
保證的並不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動;
對於複合型數據來說,const
只能保證這個指針式固定的,但是沒有辦法保證他指向的數據結構是不是可變的
3、暫時性死區
暫時性死區的本質就是:只要已進入當前作用域,所要使用的變量就已經存在了,但是不可獲取,只有等到聲明變量的那一行代碼執行的時候,纔可以獲取和使用該變量。
【注意】ES6中規定:暫時性死區、let和const語句不出現變量提升,主要是爲了減少運行時錯誤,防止在變量聲明前就使用這個變量。
4、let、const和var的區別
這三個關鍵字聲明變量的時候,都會存在變量提升,主要區別如下:
- var在聲明變量的時候,如果沒有賦值,會默認被初始化爲undefined;
- let/const在聲明變量的時候,會先創建變量,但是不會初始化變量,只有在聲明語句執行的時候變量纔會被賦值;
- let在聲明語句執行的時候,如果沒有被賦值,會默認賦值爲undefined;const聲明的是一個常量,在執行的時候必須被初始化;如果沒有被賦值,則會報錯。