var SomeObj = function() {
this.i = 0;
};
setTimeout(function() {
new SomeObj; // I mean this object
}, 0);
SomeObj對象垃圾收集到什麼點?我的無參考JavaScript對象存在多長時間?
var SomeObj = function() {
this.i = 0;
};
setTimeout(function() {
new SomeObj; // I mean this object
}, 0);
SomeObj對象垃圾收集到什麼點?我的無參考JavaScript對象存在多長時間?
只要不再使用垃圾回收,就有資格進行垃圾回收。 這意味着立即在你的情況下構造函數調用。
實際發生的實際情況如何是一個實現細節。如果遇到GC問題,您需要深入研究特定的JavaScript引擎。
從程序的角度看,沒有從任何地方引用的對象根本不「存在」。它仍然駐留在內存中的時間取決於解釋器的垃圾收集特性,以及何時/是否感覺需要收集它。
在您的具體情況下,該對象在創建後不會被使用(例如,在一個賦值中)後就會立即生成垃圾回收。事實上,對象可能根本不會被創建,優化編譯器可以很容易地完成 - 它沒有副作用,也沒有返回值。
執行settimout的回調後。 –
好..那麼我怎麼還能使用SomeObj對象呢?假設SomeObj像這樣引用DOM元素:var o = this; $(「#foo」)。click(function(){$(this).html(++ o.i)}); –
你的評論中的第二個例子與問題中的第二個例子有關嗎?當然,那裏的'o'不會被垃圾收集,因爲它仍然被使用(不像你在問題中的'SomeObj')。 – Thilo