跳到主要內容

JavaScript 少用全域變數的理由

在 JavaScript: The Good Parts 書中即有討論到這個議題(心得文連結)
容易造成變數名稱紊亂這點,可以盡量用匿名函式的寫法解決
在匿名函式中使用的變數名稱就不會跟全域變數產生衝突
但除了這個問題外,還有效能的考量
JavaScript搜尋變數的方式是 區域變數 -> 更上層的區域變數 -> .... -> 全域變數
若有常用到的全域變數,把它另存成區域變數對效能有很大的幫助

var data;

function displayData(){
  //caching variables
  var _data = data;
  ....
}

另一個考量則是JavaScript的GC(Garbage Collection)機制
全域變數只有在離開頁面或重新載入時,才會將全域變數回收
就算指定全域變數為null值,如:data = null;
因為JavaScipt的null也是一種物件,所以這樣做並不會移除參考
而在區塊中(含function)宣告的變數則是區塊範圍結束後就被回收
所以多用區域變數就可以避免記憶體等資源被長時間占用

留言