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