摘要:垃圾收集具有自動(dòng)垃圾收集機(jī)制。管理內(nèi)存優(yōu)化內(nèi)存的最佳方式,就是為執(zhí)行中的代碼只保存必要的數(shù)據(jù)。一般適用于大多數(shù)的全局變量和全局對(duì)象的屬性。如執(zhí)行完畢后,變量被銷(xiāo)毀手動(dòng)解除的引用解除一個(gè)值的引用并不意味著自動(dòng)回收該值所占的內(nèi)存。
垃圾收集
JavaScript 具有自動(dòng)垃圾收集機(jī)制。
標(biāo)記清除JavaScript 中最常用的垃圾收集方式是標(biāo)記清除。
當(dāng)變量進(jìn)入環(huán)境(如在函數(shù)中聲明一個(gè)變量)時(shí),就將這個(gè)變量標(biāo)記為“進(jìn)入環(huán)境”;
當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為“離開(kāi)環(huán)境”。
《js 高級(jí)程序設(shè)計(jì)》一書(shū)中指出:
引用計(jì)數(shù)到2008年為止,IE、Firefox、Opera、Chrome 和Safari 的JavaScript 實(shí)現(xiàn)使用的都是標(biāo)記清除式的垃圾收集策略(或類(lèi)似的策略),只不過(guò)垃圾收集的時(shí)間間隔互有不同。
引用計(jì)數(shù)的含義就是跟蹤記錄每一個(gè)值被引用的次數(shù)。
循環(huán)引用是使用引用計(jì)數(shù)模式的最大問(wèn)題。如:
function a(){ var ObjectA = new Object(); var ObjectB = new Object(); ObjectA.aaa = ObjectB; ObjectB.bbb = ObjectA; }
另外一個(gè)例子是:
var element = document.getElementById("some_element"); var myObject = new Object(); myObject.element = element; element.someObject = myObject;
為了避免循環(huán)引用導(dǎo)致的內(nèi)存問(wèn)題。應(yīng)該在不使用的時(shí)候手動(dòng)斷開(kāi)他們的鏈接。如:
myObject.element = null; element.someObject = null;
當(dāng)垃圾收集器下次運(yùn)行時(shí),就會(huì)回收他們占用的內(nèi)存。
性能問(wèn)題雖然不建議代碼調(diào)用垃圾收集過(guò)程,但還是稍微提一下:
在IE 中,調(diào)用window.CollectGarbage()方法會(huì)立即執(zhí)行垃圾收集。
在Opera 7中,調(diào)用 window.opera.collect()方法也會(huì)啟動(dòng)垃圾收集。
優(yōu)化內(nèi)存的最佳方式,就是為執(zhí)行中的代碼只保存必要的數(shù)據(jù)。一旦數(shù)據(jù)不再有用,就將其的值設(shè)置為null。這個(gè)方法就叫做接觸引用。一般適用于大多數(shù)的全局變量和全局對(duì)象的屬性。如:
function create(name){ var person = new Object(); person.name = name; return person; } var people = create("Oliver"); //create() 執(zhí)行完畢后,person 變量被銷(xiāo)毀 document.write(people.name); people = null; //手動(dòng)解除people 的引用
解除一個(gè)值的引用并不意味著自動(dòng)回收該值所占的內(nèi)存。而是以便垃圾收集器下次運(yùn)行時(shí)將其收回。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86160.html
摘要:事件委托對(duì)事件處理程序過(guò)多的問(wèn)題的解決方案就是事件委托。最適合采用事件委托技術(shù)的事件包括和。移除事件處理程序通常造成空事件處理程序的原因有可能是操作等或使用等。以防止部分瀏覽器出現(xiàn)內(nèi)存問(wèn)題。 事件委托 對(duì)事件處理程序過(guò)多的問(wèn)題的解決方案就是事件委托。例如,click事件會(huì)一直冒泡到document層次。也就是說(shuō),我們可以為整個(gè)頁(yè)面指定一個(gè)onclick事件處理程序,而不必給每個(gè)可單擊的...
摘要:如很明顯可以看到,實(shí)際上是函數(shù)的局部變量。簡(jiǎn)單的說(shuō)就是,復(fù)制給參數(shù),在函數(shù)內(nèi)部是局部變量,無(wú)論怎么變化,都不影響的變化。 ECMAScript 變量可能包含兩種不同數(shù)據(jù)類(lèi)型的值:基本類(lèi)型值和引用類(lèi)型值。 基本類(lèi)型和引用類(lèi)型的值 基本類(lèi)型值(String,Number,Boolean,Null,Undefined)指的是簡(jiǎn)單的數(shù)據(jù)段;引用類(lèi)型值(保存在內(nèi)存中的對(duì)象)指的是那些可能由多個(gè)值...
摘要:如調(diào)用函數(shù)聲明函數(shù)不會(huì)報(bào)錯(cuò)使用函數(shù)表達(dá)式則不可以報(bào)錯(cuò)創(chuàng)建函數(shù)的兩種方式,一個(gè)是函數(shù)聲明如第一種方式一個(gè)是函數(shù)表達(dá)式如第二種方式。第二種函數(shù)創(chuàng)建方式創(chuàng)建的函數(shù)叫匿名函數(shù)或拉姆達(dá)函數(shù),因?yàn)殛P(guān)鍵字后面沒(méi)有標(biāo)識(shí)符。 函數(shù)表達(dá)式的基本概念 name屬性和函數(shù)提升 首先,name屬性,通過(guò)這個(gè)屬性可以訪問(wèn)到給函數(shù)指定的名字。(非標(biāo)準(zhǔn)的屬性)如: function People(){}; cons...
摘要:深入理解原型和閉包王福朋博客園深入理解原型和閉包一切都是對(duì)象原文鏈接本文要點(diǎn)一切引用類(lèi)型都是對(duì)象,對(duì)象是屬性的集合。每個(gè)對(duì)象都有一個(gè),可稱(chēng)為隱式原型。另外注意,構(gòu)造函數(shù)的函數(shù)名第一個(gè)字母大寫(xiě)規(guī)則約定。 深入理解javascript原型和閉包 王福朋 - 博客園 —— 《 深入理解javascript原型和閉包》 1. 一切都是對(duì)象 原文鏈接:http://www.cnblogs.com...
摘要:上面代碼中,通過(guò)為組件指定事件的回調(diào)函數(shù),確保了只有等到真實(shí)發(fā)生事件之后,才會(huì)讀取屬性。七表單代碼九要點(diǎn)文本輸入框的值,不能用讀取,而要定義一個(gè)事件的回調(diào)函數(shù),通過(guò)讀取用戶輸入的值。 一.JSX簡(jiǎn)介 JSX即JavaScript XML,一種在React組件內(nèi)部構(gòu)建標(biāo)簽的類(lèi)XML語(yǔ)法。在不使用JSX的情況下,React程序中創(chuàng)建DOM是這樣的: //v0.11 React.DOM.h1...
閱讀 3418·2021-11-25 09:43
閱讀 2301·2021-09-06 15:02
閱讀 3546·2021-08-18 10:21
閱讀 3345·2019-08-30 15:55
閱讀 2352·2019-08-29 17:06
閱讀 3539·2019-08-29 16:59
閱讀 968·2019-08-29 13:47
閱讀 2765·2019-08-26 13:24