[问题] 关于Closure Garbage Collection疑问

楼主: chieh0919 (chieh)   2014-07-31 22:40:20
大家好, 最近在看下面的Closure和Google JS Style Guide的Closure时
有一些疑问想请教大家
http://jibbering.com/faq/notes/closures/
http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml#Closures
Google Guide里Closure不好的范例中说,
在函式内设定的onclick里虽然没有用到element,
但形成的Closure Scope chain中, 依然会refer到这个element
那么下面的程式中, obj.fn内只有用到a, 用侦错在debugger处停下时,
在监看式中看b会是undefined, 这样b是否依然保持着被refer,
存在于obj.fn上层的Scope chain?
或者他已经是处于可以(已)被回收的状态呢?
(function () {
var a = 1,
b = 2;
obj.fn = function () {
debugger;
var x = a + 3;
};
} ());
另外, 在jQuery物件使用上, 在$elem.remove()后,
jQuery物件的数字key依然保持DOM Element的关联
如下面的程式中, 创建了一个jQuery物件并加入到body,
随后马上remove, 但因为被关联于$elem变量, 所以随时可以被append回DOM,
这样是否表示在$elem设为null前, $elem下的DOM Element都不会被回收?
var $elem = $('<div>').appendTo('body');
$elem.remove();
...
$elem.appendTo('body);
另外上面的疑问套用在Closure情境中时,
(function () {
var $elem = $('<div>').appendTo('body');
$elem.on('click', function () {
//假设这边不是用$(this)取得$elem,
//而是直接使用$elem变量的话,
//是否会发生Google Guide中Closure里所说的循环参考的情况,
//进而造成$elem无法被回收?
});
} ());
以上是小弟在看这2份文件的Closure时产生的疑问,
请大家帮小弟解答, 谢谢^^
作者: sean2449 (肉松)   2014-08-02 09:33:00
你第二个就是普通closure吧可以被回收Google的是假如我呼叫foo( myEle );然后myEle = null;myEle指到的物件不会被回收因为他被foo里的element指到第一个的话b不被用到,所以function执行完就回收第一个不太确定就是或是跟browser有关?

Links booklink

Contact Us: admin [ a t ] ucptt.com