let、const
用來宣告「區塊裡」的變數,區塊就是: { } 所涵蓋的內容範圍。在 { } 使用 let 宣告的變數,只會存活在 { } 裡,限制作用域,便不會汙染到全域變數。
以下範例:
- 在 { } 使用 var 宣告的變數,可在外層被讀取。
- 在 { } 使用 let 宣告的變數,只會存活在 { } 裡,在外層呼叫則會顯示 is not defined。
使用時機:
- 當希望某變數,在區塊裡執行完成後,就可以結束時。
- 最好都寫「函數式」,使用 function 的呼叫方式,盡量不要使用到 var。
let -for 用法
for 迴圈搭配 let 宣告變數,在區塊裡面的事件監聽會做重新綁定的動作,便可以成功抓出所有符合條件的值了(0、1、2)。
變數 i 就不會污染到全域變數,使用 console.log(i) 查看,會顯示 is not defined。
for - var 用法(不建議)
若是使用 for 搭配 var 來宣告變數時,容易污染全域變數,如下圖,i 被宣告成全域變數。
用 window 查看會發現全域變數 i: 3。所以在 for 迴圈裡綁定事件監聽的結果,只會顯示全域變數的最終結果。
const 特性
- 用來宣告「唯讀變數」,也就是只能讀取、不能做修改的「常數」。
- 通常用在不能被變更的變數,如:url 網址。
- 如果宣告變數為「物件」或「陣列」時,則變數內容可以被修改。
- 使用 Object.freeze( ) 使物件不能被修改。
注意事項與使用時機
- var 會向上提升、let、const 不會向上提升。
var 變數的時候它都會向上提升到最上面位置去,到 JavaScript 最上面,先建立好一個記憶體空間。若在宣告變數前 console 則會顯示 undefined(尚未給值)。
let 跟 const ,則是在哪一行建立,則在那一行才開始成立這個變數,然後賦予值一次做完。若在宣告變數前 console 則會顯示 is not defined(尚未宣告)。
2. 同個區塊上不能重複命名
var 在同個區塊上可以重複命名,相同的變數名稱可以重新宣告,給予新的值。
let 跟 const 若重複命名,則會出錯,如下圖。
3. let、const 不會繼承到 window 上面,不會變成全域變數。