2009-10-22 22 views
4

JavaScript是否支持垃圾收集?變量超出範圍時的JavaScript垃圾收集

例如,如果我使用:

function sayHello (name){ 
    var myName = name; 
    alert(myName); 
} 

做我需要使用「刪除」刪除myName變量或我只是忽略它?

+0

肯定沒有,CTO:http://www.codingforums.com/archive/index.php/t-157637.html –

+0

請重新標記/標題改成:這有什麼好做優化。我建議「JavaScript變量範圍」 – kdgregory

+0

另請參閱有關JS GC的這個問題 - http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection – Kobi

回答

3

忽略它 - 在sayHello函數完成之後,myName落在範圍之外並被gc化。

5

沒有。
delete用於從對象中刪除屬性,而不是用於內存管理。

1

正如其他人提到的,當函數退出,然後你的變量超出範圍,因爲它的範圍僅僅是在函數中,所以後來GC能夠清理。

但是,該變量可能被函數外部的某個東西引用,那麼它將不會被gc'ed一段時間,因爲它仍然有一個引用它。

你可能想在JavaScript的作用域讀了起來: http://www.webdotdev.com/nvd/content/view/1340/

隨着你可以創建內存泄漏關閉,這可能是你正在試圖解決這個問題,而且是關係到我已經提到的問題: http://www.jibbering.com/faq/faq_notes/closures.html

4

JavaScript支持垃圾收集。在這種情況下,由於您明確聲明瞭該函數內的變量,因此它將在函數退出並在某個時間後收集時超出範圍,並且(2)不能成爲delete(下面鏈接的每個參考)的目標, 。

delete可能是有用的,如果你隱式聲明的變量,這使他們在全球範圍內:

function foo() 
{ 
    x = "foo"; /* x is in global scope */ 
    delete x; 
} 

然而,這是一個不好的做法,隱式地定義變量,因此請務必使用var,你不會必須關心delete

欲瞭解更多信息,請參見:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/delete_Operator