2016-04-10 30 views
-1

問題在所有問題中提出,如果在X時間內不改變,我的變量是否會被另一個傳遞或動態變量設置?Node.js中的垃圾收集範圍 - 變量保持多久?

我查看了ECMAScript規範,對於什麼以及什麼時候垃圾收集,我仍然有點困惑。我看了Lifetime of JavaScript variables,它的回答說

「如果標識符可達(通過直接指針或封閉),它不應該被垃圾收集。

所以我剛開始這個權利?

基本上垃圾收集發生如果變量是由另一個傳遞的值設置。

怎麼樣在一個三元運算符

我兩個不同的功能之間切換,以每月使用ternary operator作爲switch將它知道它確實condition 1前3個月運行3,做condition 2還是我在垃圾回收的風險,它將運行condition 1每一次?

+0

你能顯示一些代碼嗎?我認爲只要對變量的引用存在,它就不會是GC。 – carlosdubusm

+0

別擔心。 –

回答

1

變量值在之後或之後被垃圾收集,此時沒有更多的變量引用。

回顧數組和對象在Javacript通過引用傳遞,所以,如果

var a={}, b=a; 

目的指向a具有兩個引用:ab

a=null; 

使對象只有一個參考b,所以它不是垃圾收集的候選者。

b=null; 

現在對象沒有引用,所以它成爲集合的候選對象。

在封閉件而言,這同樣適用於:

b=function(){ 
    var a={}; 
    return a; 
}; 

b哪裏是向「關閉」的對象一旦由a稱爲參考。

函數完成後,a超出了範圍,因此不再是對該對象的引用。

雖然b在範圍,對象將不會被垃圾收集,直到

b=null; 

這將釋放對象的集合。

無參考值的垃圾收集取決於JavaScript引擎,通常不受您的直接控制。

有幾種方法可以觸發顯式收集,但在大多數情況下很少需要。