js函數(shù)的引用, 關(guān)于內(nèi)存的開銷
更新時間:2012年09月17日 11:28:39 作者:
函數(shù)的引用, 對于內(nèi)存的開銷分析,需要的朋友可以參考下
請看如下代碼:
var arr = [];
var cc = function(){alert('xx');};
for(var i = 0; i<2; i++){
arr[i] = function(){alert('yy');}
arr[i+10] = cc;
}
console.group('開始')
console.group('1')
console.info( arr[0] == arr[1]);
console.info( arr[0] === arr[1]);
console.info( arr[0].toString());
console.info( arr[1].toString());
console.groupEnd('1')
console.group('2')
console.info( arr[10] == arr[11]);
console.info( arr[10] === arr[11]);
console.info( arr[10].toString());
console.info( arr[11].toString());
console.group()
console.groupEnd('開始');
在火狐的firebug中的控制臺運行結(jié)果如下圖:

分析:
第五行代碼的循環(huán)開始,循環(huán)結(jié)束后 arr數(shù)組得到的結(jié)果為:
arr[0] = function(){ alert('yy'); }
arr[1] = function(){ alert('yy'); }
arr[10] = cc
arr[11] = cc
可以看出來, 控制臺進(jìn)行結(jié)果,上圖。
arr[0] 不等于 arr[1]
但是 arr[10] 等于 arr[11] , 因為它引用了前面定義的變量。
其實在循環(huán)的過程中都在重新定義函數(shù)function(){alert('yy');}
arr[0] 和 arr[1]的toString 輸出的內(nèi)容是相同的。 但是兩個是獨立的方法, 占用各自的內(nèi)存,所以為了省內(nèi)存, 可以用于把函數(shù)定義在循環(huán)外。
函數(shù)定義在循環(huán)外面的前提條件是,函數(shù)沒有接受在循環(huán)內(nèi)變化的變量。
復(fù)制代碼 代碼如下:
var arr = [];
var cc = function(){alert('xx');};
for(var i = 0; i<2; i++){
arr[i] = function(){alert('yy');}
arr[i+10] = cc;
}
console.group('開始')
console.group('1')
console.info( arr[0] == arr[1]);
console.info( arr[0] === arr[1]);
console.info( arr[0].toString());
console.info( arr[1].toString());
console.groupEnd('1')
console.group('2')
console.info( arr[10] == arr[11]);
console.info( arr[10] === arr[11]);
console.info( arr[10].toString());
console.info( arr[11].toString());
console.group()
console.groupEnd('開始');
在火狐的firebug中的控制臺運行結(jié)果如下圖:

分析:
第五行代碼的循環(huán)開始,循環(huán)結(jié)束后 arr數(shù)組得到的結(jié)果為:
arr[0] = function(){ alert('yy'); }
arr[1] = function(){ alert('yy'); }
arr[10] = cc
arr[11] = cc
可以看出來, 控制臺進(jìn)行結(jié)果,上圖。
arr[0] 不等于 arr[1]
但是 arr[10] 等于 arr[11] , 因為它引用了前面定義的變量。
其實在循環(huán)的過程中都在重新定義函數(shù)function(){alert('yy');}
arr[0] 和 arr[1]的toString 輸出的內(nèi)容是相同的。 但是兩個是獨立的方法, 占用各自的內(nèi)存,所以為了省內(nèi)存, 可以用于把函數(shù)定義在循環(huán)外。
函數(shù)定義在循環(huán)外面的前提條件是,函數(shù)沒有接受在循環(huán)內(nèi)變化的變量。
您可能感興趣的文章:
- 淺談JavaScript 函數(shù)參數(shù)傳遞到底是值傳遞還是引用傳遞
- 菜鳥學(xué)習(xí)JavaScript小實驗之函數(shù)引用
- Javascript學(xué)習(xí)筆記之 函數(shù)篇(三) : 閉包和引用
- JavaScript對象參數(shù)的引用傳遞
- Js從頭學(xué)起(基本數(shù)據(jù)類型和引用類型的參數(shù)傳遞詳細(xì)分析)
- js中判斷Object、Array、Function等引用類型對象是否相等
- JavaScript 類的定義和引用 JavaScript高級培訓(xùn) 自定義對象
- javascript引用對象的方法
- JavaScript對象引用與賦值實例詳解
- javascript引用對象的方法代碼
- js中值引用和地址引用實例分析
相關(guān)文章
javascript獲取重復(fù)次數(shù)最多的字符
本文給大家講述的是使用javascript實現(xiàn)獲取重復(fù)次數(shù)最多的字符,代碼很簡單,有需要的小伙伴可以參考下。2015-07-07javascript的document中的動態(tài)添加標(biāo)簽實現(xiàn)方法
下面小編就為大家?guī)硪黄獪\談javascript的document中的動態(tài)添加標(biāo)簽實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10js 實現(xiàn) list轉(zhuǎn)換成tree的方法示例(數(shù)組到樹)
這篇文章主要介紹了js 實現(xiàn) list轉(zhuǎn)換成tree的方法示例(數(shù)組到樹),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08