作者B9 (葉酸酸)
看板Ajax
標題[問題] closure 與 garbage collection 問題?
時間Sat Jun 18 23:36:42 2011
我想請問在下面這個例子中,outer 所在的層級,closure.height 會不會被回收?
而 closure 又是否會被回收?@@
inner 這層的 cat object 被回傳到 outer 這層,而 cat.age 這 function 又 refer
closure.age 這個變數,所以 closure.age 一定不會被回收。
closure.height 照理說沒有被 refer,到了 outer 曾經應該會被回收。
問題比較大的是 closure,照理說 closure 沒有被 refer,應該會被回收。
可是 closure 有個 property age 被 refer,這樣還能夠說 closure 沒有被 refer 嗎?
但理論上說起來,應該是可以被回收才對。不知道有沒有人知道這問題的答案?
或者可以提供找出答案的試驗方法?@@
// JSBin
http://jsbin.com/ohudi5/2/edit#js //
javascript:(function()
{
// outer. //
var cat = (function()
{
// inner. //
var closure =
{
height: 3
};
var cat =
{
age: function(age)
{
if (!arguments.length)
return closure.age;
closure.age = age;
return this;
}
};
return cat;
})();
console.log( cat.age(3).age() );
})();
--
Oni devas ami animalojn. Ili estas tiel bongustaj.
One should love animals. They are so tasty.
每個人都應該愛動物,他們是如此美味。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 175.180.52.50
※ 編輯: B9 來自: 175.180.52.50 (06/18 23:37)
→ sk1765:closure是 cat物件的一個私有物件 只有他能夠用 沒有回收的 06/19 01:30
→ sk1765:說法 他是一個private 這在 The Good Parts裡第五章 06/19 01:32
→ sk1765:第四種物件宣告方式 Functional模式 有詳細介紹 為什麼這樣 06/19 01:34
→ sk1765:建構物件 最後答案會是3 06/19 01:37
→ No:另外,以scope chain來看,內部的closure是有被refer的 06/19 01:48
→ No:而GC回收是依據有沒有被refer,這樣應該可以推出你要的答案@@ 06/19 01:50