我正在爲移動設備構建一些東西,並想以某種方式清除空對象變量以釋放一些內存。在這裏我有兩個簡單的例子,兩個都是匿名函數,我相信但是更好或更有效的方法是什麼?對不起,如果我把它全錯了。對我來說,兩者似乎都做了同樣的事情,儘管我更喜歡第一個,因爲在我需要它之前不會創建對象。第二個版本會立即執行創建變量,對象等的代碼,但在我需要它之前不會執行主構建函數。更好的方法nulling變量,在javascript中的對象
我只是想弄清楚哪種方式更常見。我知道像我這樣的初學者大多誤解了匿名函數的使用。感謝您的貢獻。
V1
var app = function() {
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
//do some things
console.log(a + ', ' + b);
//do a cleanup
app.cleanup = function() {
a = null;
b = null;
console.log(a, b);
}
}
setTimeout(app, 200);
V2
var app = {};
(function(){
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
app.build = function(){
//do some things
console.log(a + ', ' + b);
}
//do a cleanup
app.cleanup = function(){
a = null;
b = null;
console.log(a, b);
}
setTimeout(app.build,200);
})();
html或事件後來
<input type="button" onclick="app.cleanup()" value="clean" />
你不應該擔心釋放資源。 JavaScript有一個垃圾收集器,它將拾取超出範圍並摧毀它們的變量。當你不需要它時刪除一個對象的引用('delete obj.yourReference',/'reference = null' /'reference = undefined'),並讓垃圾收集器完成剩下的工作。 – Matt
,但要刪除一個引用或null,你會用我的V1或V2去?我的意思是我仍然需要在某個地方做到這一點。 – devjs11
或簡化@Matt所說的內容:如果變量變得不可用(其他方法無法以任何方式訪問它),它將被標記爲垃圾收集。基本上,如果一個變量是在函數中創建的(局部變量,就像你的情況),在函數結束後,沒有人能夠訪問它,所以它會自動清理。 – bezmax