iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

JavaScript老學徒筆記—馬步篇系列 第 16

【Day15】公園跟你家院子—全域變數與區域變數的區別

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

這一點是需要特別注意的。


上一篇
【Day14】變數的地盤—作用域(scoop)與提升(Hoisting)
下一篇
【Day16】箭頭函式
系列文
JavaScript老學徒筆記—馬步篇35

尚未有邦友留言

立即登入留言