javascript高級程序設計第三版 第四章 變量、作用域和內存問題

4.1.4 檢測類型

檢測引用類型的值是什麼對象,使用instanceof

4.2 執行環境及作用域

執行環境是js中最爲重要的一個概念。每個環境都有一個與之關聯的變量對象,環境中定義的所有變量和函數都保存在該變量對象中。
web中,window對象被認爲是全局執行環境。某個執行環境中的所有代碼執行完畢後,該環境被銷燬,保存在其中的所有變量和函數定義也隨之銷燬。
每個函數有自己的執行環境,每進入一個函數,函數的執行環境就會被推入一個環境棧中。
每進入一個環境,會創建變量對象的一個作用域鏈。其用途是,保證對執行環境有權訪問的所有變量和函數的有序訪問。

4.2.1 延長作用域鏈

有些語句可以在作用域鏈前端臨時增加變量對象,該變量對象會在代碼執行後被移除。
1、try-catch語句的catch塊
2、with語句。也許是因爲會延長作用域鏈,導致性能下降,不推薦使用吧。

function buildUrl(){
    var qs = "?debug=true";
    with(location){ //其變量對象中就包含了location對象的所有屬性和方法
        var url=href+qs; //url變量仍在buildUrl()環境的變量對象中
    }
    return url; //因此能返回,沒有報錯
}

4.2.2 沒有塊級作用域(ES6中let提供塊級作用域功能)

if(true){
    var color = "blue";
}
alert(color); //blue

for(var i=0;i<10;i++){
    doSomething(i);
}
alert(i); //10

4.3 垃圾收集

js具有自動垃圾收集機制
採用標記清除算法,因爲引用計算算法在循環引用中存在嚴重問題導致內存泄露。
全局變量不再使用的時候,需要手工解除引用,讓值脫離執行環境,以便垃圾收集器下次運行將其回收。
globalPerson = null;

發佈了33 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章