鑑於在Javascript中創建並存儲在函數中的對象會發生什麼?
function Foo(){
this.name = "foo"
}
Foo.prototype.hello = function(){
alert("Hello");
}
function bar(){
var foo = new Foo();
foo.hello();
}
會發生變量foo的是什麼?它會收集垃圾嗎?
鑑於在Javascript中創建並存儲在函數中的對象會發生什麼?
function Foo(){
this.name = "foo"
}
Foo.prototype.hello = function(){
alert("Hello");
}
function bar(){
var foo = new Foo();
foo.hello();
}
會發生變量foo的是什麼?它會收集垃圾嗎?
根據MDN,許多類型的算法被用於垃圾收集...。在上述情況下,foo
的範圍僅限於bar
。所以,只要函數bar
返回,它就會被垃圾回收。
引用計數的垃圾收集
這是最天真的垃圾收集算法。該算法 降低了「一個對象不再需要」的定義,而「一個 對象沒有其他對象引用它」。如果零參考指向此 對象,則該對象被視爲 垃圾可收集。
馬克 - 清除算法
該算法減少了「無需 對象了」發送「的對象是不可達」的定義。
該算法假設知道一組對象,稱爲根 (在JavaScript中,根是全局對象)。定期地, 垃圾收集器將從這些根開始,找到從這些根引用 的所有對象,然後從 引用這些的所有對象等。從根開始,垃圾收集器將因此 找到所有可到達的對象,並且收集所有不可達的物體。
foo
在滿足雙方的算法進行垃圾回收
在其他語言中是否需要手動完成? – tdoakiiii
在C++的情況下,你需要手動完成 – gypsyCoder
只在最後'bar',所以可以收集一次'bar'完整的執行,有沒有其他的引用指向它。 – fuyushimoya