JavaScript的變數依使用的切分範圍(作用域)可以分為兩種:
前面提到透過var宣告的變數,最小的切分範圍為function,在函式內宣告的變數只能在函式內部使用,無法由外層叫用,其他的函式也不能使用,當函式執行完之後,變數就由記憶體中清除。這就是「區域變數」。
而在外層用var宣告的變數則為「全域變數」,即使寫在function裡面,沒用var宣告的變數都是「全域變數」。就如同前面有提到的,function內可以去捉外層的變數來用,而外層無法捉到function內的變數來用,也就是說「全域變數」是大家公用的。而「區域變數」則只能在function內使用。
舉個簡單的例子,公園裡的盪鞦韆,大家都可以去玩,這就是「全域變數」;但是你家院子裡的盪鞦韆,外面的人沒辦法進來玩,就是「區域變數」。
而其實「全域變數」指的是「全域物件」的屬性,以瀏覽器來說,「全域物件」就是window物件,window物件的部分在提到BOM的時候會再詳細解釋,我們先知道就好。
var man = '郭靖';
console.log(window.man); //郭靖
「var man = '郭靖'」變成window物件的屬性了。
而使用var宣告的全域變數,無法使用delete關鍵字刪除。
var man = '郭靖';
console.log(window.man);
delete window.man //false
console.log(window.man); // 郭靖
但是透過window宣告的全域變數,卻可以使用delete刪除。
window.man = '郭靖';
console.log(window.man);
delete window.man //true
console.log(window.man); // undefined
這一點是需要特別注意的。