javascript進階程式設計第三版 第四章 變數、範圍和記憶體問題

來源:互聯網
上載者:User
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); //bluefor(var i=0;i<10;i++){    doSomething(i);}alert(i); //10
4.3 垃圾收集

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.