大家好, 最近在看下面的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时产生的疑问,
请大家帮小弟解答, 谢谢^^