讓我們在開始時說,我們將:當在Javascript中重新分配對象變量時,原始對象會發生什麼變化?
class AI {
// class properties/methods here
}
var chappie = new AI;
然後使用變量,如果我想通過調用將其復位後:
chappie = new AI;
會發生什麼原始的對象?它是否收集垃圾?這是允許的,還是有更好的方法來「重置」一個變量?
讓我們在開始時說,我們將:當在Javascript中重新分配對象變量時,原始對象會發生什麼變化?
class AI {
// class properties/methods here
}
var chappie = new AI;
然後使用變量,如果我想通過調用將其復位後:
chappie = new AI;
會發生什麼原始的對象?它是否收集垃圾?這是允許的,還是有更好的方法來「重置」一個變量?
如果沒有更多的對象引用,那麼對象最終將被垃圾回收。
如果你原本有1個引用,現在你沒有,最終內存將被釋放。
var obj = { };
var a = obj;
var b = obj;
a = null;
還有一個參考,所以沒有什麼變化。
至於另一個問題:「我還會怎樣重置一個變量?」 我的後續問題是「爲什麼?」
如果你想GC啓動,那麼你可以將var設置爲null
或者undefined
或者其他什麼(假設它是上次引用該對象的時間)。
......否則,當var不再需要var時,GC也會清理var本身。 如果被刪除的變量是最後一個值的引用,那麼該值將被清除。
,那麼它們不會被移除,直到它們超出範圍。由於undefined具有比null更有意義的上下文含義,所以最好使用undefined而不是null。 'null'被序列化爲JSON,'undefined'被忽略。 – Blindman67
@ Blindman67:'null'具有「無對象」的含義,這正是這裏所優選的。 – Bergi
@Bergi null是一個佔位符。這意味着此時變量沒有適用的價值,但是我們希望保留(保留)這個變量以防未來需要。未定義的含義是文字,指的是不存在未定義的實體。它被分配來表明變量不再需要,並且它不再具有有意義的上下文。在序列化/傳輸/克隆期間,必須保留具有null值的變量,而不像具有未定義變量的變量,該變量可以被轉儲。如果你沒有進一步的使用變量將其設置爲未定義。 – Blindman67
除非另有保留,否則它將被GC刪除。這是刪除不需要的內存分配的可接受的方式。調用解引用。 – Blindman67
取決於你的意思是「重置」。您將創建一個新對象並將其分配給該變量。但是,如果您只想丟棄前一個對象,請將該變量設置爲null並且不要創建一個新對象。有點不清楚你的意圖是什麼。 –
*「有沒有更好的方法」* ......如果你想要做的只是覆蓋原來的 – charlietfl