我是否必須自己摧毀實例? ...如果我不給他們分配一個變量......他們會自動離開嗎?瀏覽器的JavaScript垃圾收集如何工作?
new ImageUploadView();
VS
var Iu = ImageUploadView();
我是否必須自己摧毀實例? ...如果我不給他們分配一個變量......他們會自動離開嗎?瀏覽器的JavaScript垃圾收集如何工作?
new ImageUploadView();
VS
var Iu = ImageUploadView();
如果有在javascript對象的參考,所述垃圾收集器將它清理乾淨。
垃圾回收器的工作方式是尋找沒有人引用的javascript對象。如果沒有人提及它,則不能再次使用它,因此可以刪除它並回收佔用的內存。另一方面,如果任何JavaScript實體仍然有對該對象的引用,那麼它仍處於「正在使用中」並且不能被刪除。
在你的第一個代碼示例:
new ImageUploadView();
除非對象存儲遠離this
指針的構造到其他一些變量或對象或者創建一些封閉導致要舉行的對象引用,那麼有將不會引用這個新對象,它將被垃圾收集器清理。
如果第二個代碼示例:
var Iu = ImageUploadView();
只要Iu
變量存在,保持在範圍將包含無論ImageUploadView()
函數返回。注意,第二個例子只是執行一個函數並存儲它的值。它不一定會創造任何東西。如果ImageUploadView()
剛剛返回true
,那麼這就是變量將包含的所有Iu
。
所以,只要變量存在,它就會包含它所包含的值。得到它了。 `:P` – 2011-12-14 01:30:35
@ŠimeVidas - 我加入了「保持範圍」以更好地傳達我想說的話。 – jfriend00 2011-12-14 01:38:11
第一種方法很好。假設ImageUploadView
的實例自己清理完畢後,它將被垃圾收集器收集。
對於大型對象,假設在垃圾收集器中構建的瀏覽器在超出範圍之後將進行清理並不一定是好的做法。你最好用「刪除」來清除它。例如:
delete MyImageUploadView;
編輯:如果它不是被作爲一個屬性引用的可能優選的對象設置爲NULL。
是的,他們是垃圾收集。只要存在至少一個對象,就存在對象。 – 2011-12-14 01:26:59