91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript垃圾回收機制的理解

發布時間:2021-09-14 09:54:47 來源:億速云 閱讀:136 作者:chen 欄目:開發技術

本篇內容主要講解“JavaScript垃圾回收機制的理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript垃圾回收機制的理解”吧!

JavaScript語言是一門優秀的腳本語言。其中包含腳本語言的靈活性外還擁有許多高級語言的特性。例如充許構建和實例化一個對象,垃圾回收機制(GC:Garbage Collecation)。通常我們使用new創建對象,GC負責回收對象占用內存區域。因此了解GC,可以加深對javascript垃圾回收機制的理解。

GC在回收內存時,首先會判斷該對象是否被其它對象引用。在確定沒有其它對象引用便釋放該對象內存區域。因此如何確定對象不再被引用是GC的關鍵所在。

<script type="text/javascript">function aa()
{this.rr = "彈窗";    
}function bb()
{this.rr = "彈窗";
}var b1;function cc()
{var a1 = new aa();
    b1 = new bb();return b1;
}

cc();
alert(b1.rr)</script>

如上代碼中,執行完cc()后a1被回收了,此后我們可以通過b1.rr彈出文字窗口。在一些基礎書籍中解釋為:a1為局部變量,b1是全局變量。局部變量執行完后會被GC回收.但不全是這樣,如下代碼:

<script type="text/javascript">function aa()
{this.rr = "彈窗";    
}function bb()
{this.rr = "彈窗";
}function cc()
{var a1 = new aa();var b1 = new bb();return b1;
}var b1 = cc();
alert(b1.rr);</script>

此時cc函數中的 a1,b1都是局部變量,但仍然會彈出文字窗口。說明b1并沒有被GC回收。因此javascript中局部變量不是所有時候都被GC回收的。

GC回收機制還需要近一步了解。在此時引入幾個概念:雙向鏈表,作用域鏈,活動對象(為了方便理解,簡化了原文的概念[http://softbbs。pconline。com。cn/9497825。html]) , 其中雙向鏈表描述復雜對象的上下層級關系。 作用域鏈與活動對象分別是雙向鏈表中的某個節點。以函數cc為例變量層級關系為:

window<=>cc<=>a1<=>rr<=>b1<=>rr

在執行cc()方法時,內存中變量的引用關系如上圖,文字解釋如下:

  1. cc的活動對象包括a1和b1,其作用域鏈是window

  2. cc的活動對象包括a1和b1,其作用域鏈是window

  3. a1的活動對象包括rr,其作用域鏈是cc

  4. b1的活動對象包括rr,其作用域鏈是cc

執行cc()時,cc的執行環境會創建一個活動對象和一個作用域鏈。其局部變量a1,b1都會掛在cc的活動對象中。當cc()執行完畢后,執行環境會嘗試回收活動對象占用的內存。但因局部變量b1 通過return b1,為其增加了一條作用域鏈:window<=>b1<=>rr,所以GC停止對b1回收。因此如果想將一個局部變量/函數提升為全局的,為其增加一條作用域鏈就OK了。

同時控制好對象的作用域鏈也變得重要了。因作用域鏈會意外導致GC無法回收目標對象。例如:

<SCRIPT LANGUAGE="JavaScript"><!--//貓function cat(name)
{var zhuren ;this.name = name;        //設置主人    this.addZhuRen = function(zr){
        zhuren = zr;
    }this.getZhuRen = function(){return zhuren;
    }
}    
//主人function zhuren(name){this.name = name;
}//創建主人:var zr = new zhuren("zhangsan");//創建貓var cat1 = new cat("asan");//設置該貓的主人cat1.addZhuRen(zr);//釋放主人zr = null ;//此處還存在對主人對象的引用alert(cat1.getZhuRen().name)//--></SCRIPT>

到此,相信大家對“JavaScript垃圾回收機制的理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昂仁县| 清原| 宜春市| 汉源县| 长沙县| 新余市| 巨野县| 平陆县| 改则县| 中阳县| 临高县| 监利县| 时尚| 西充县| 涟源市| 和硕县| 平顶山市| 寿阳县| 台中县| 康马县| 隆林| 溆浦县| 隆安县| 威远县| 孝感市| 美姑县| 山阴县| 莱西市| 比如县| 湛江市| 新郑市| 铁力市| 宁陕县| 嘉禾县| 芜湖县| 瑞昌市| 天柱县| 遵化市| 镇沅| 泗阳县| 常熟市|