變數宣告與不宣告的差異
已宣告的變數與全域物件裡的屬性
MDN 文件中提到其中差異在於,已宣告的變數是全域物件裡的一個無法變更 (non-configurable) 的屬性, 而未宣告的變數則是可變更的 (configurable),可以嘗試刪除產生的變數,觀察其差異。
在此要介紹一個觀念「變數無法被刪除,屬性才可以」
這邊提供範例來說明有無宣告的差別
1 | var a = 1; |
a 和 b 使用 delete 來刪除
結果會是有宣告的 a 無法被刪除,但 b 是被刪除的
這是因為 b 變成 window 底下的屬性,所以 delete 結果 truedelete 是刪除物件屬性的方法
可參考 MDN 文件
而 a 是用 var 宣告變數的方式去新增,所以是無法被刪除的,所以會建議都要宣告變數
var 與 let 宣告
let 宣告不會變成全域變數,可以參考這篇【JavaScript 新手筆記】【3】變數(Variables),裡面有提到:
var宣告變數為全域變數。反之,let宣告不會變成全域變數(就算在函數外面用let宣告變數,該變數也不會是全域變數)。
他也提供範例,可了解 var 和 let 在全域的差異
1 | let a = 10; |