作者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)
1F:→ sk1765:closure是 cat物件的一个私有物件 只有他能够用 没有回收的 06/19 01:30
2F:→ sk1765:说法 他是一个private 这在 The Good Parts里第五章 06/19 01:32
3F:→ sk1765:第四种物件宣告方式 Functional模式 有详细介绍 为什麽这样 06/19 01:34
4F:→ sk1765:建构物件 最後答案会是3 06/19 01:37
6F:→ No:另外,以scope chain来看,内部的closure是有被refer的 06/19 01:48
7F:→ No:而GC回收是依据有没有被refer,这样应该可以推出你要的答案@@ 06/19 01:50