0%

宣告變數

變數宣告與不宣告的差異

已宣告的變數與全域物件裡的屬性

MDN 文件中提到其中差異在於,已宣告的變數是全域物件裡的一個無法變更 (non-configurable) 的屬性, 而未宣告的變數則是可變更的 (configurable),可以嘗試刪除產生的變數,觀察其差異。

在此要介紹一個觀念「變數無法被刪除,屬性才可以」
這邊提供範例來說明有無宣告的差別

1
2
3
4
var a = 1;
b = 2;
console.log("a",delete a,"b",delete b);
//"a" false "b" true

ab 使用 delete 來刪除
結果會是有宣告的 a 無法被刪除,但 b 是被刪除的
這是因為 b 變成 window 底下的屬性,所以 delete 結果 true
delete 是刪除物件屬性的方法

可參考 MDN 文件

a 是用 var 宣告變數的方式去新增,所以是無法被刪除的,所以會建議都要宣告變數

var 與 let 宣告

let 宣告不會變成全域變數,可以參考這篇【JavaScript 新手筆記】【3】變數(Variables),裡面有提到:

var 宣告變數為全域變數。反之,let 宣告不會變成全域變數(就算在函數外面用 let 宣告變數,該變數也不會是全域變數)。

他也提供範例,可了解 varlet 在全域的差異

1
2
3
4
let a = 10;
var b = 100;
console.log(window.a); // undefined
console.log(window.b); // b is 100