[問題] 關於Closure Garbage Collection疑問
大家好, 最近在看下面的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時產生的疑問,
請大家幫小弟解答, 謝謝^^
--
我先看一下妳的報告 醫生~我得什麼病阿 ◢◤ 天阿~這沒有藥能醫阿..
◢██◣ ◤ ◢██◣ ◤ ◢◤◢██◣ ◤ (碰!暈倒)
█ ◥▌ ◤◥◥█ ψQSWEET ◢◤ █ ◥▌
◤□︵□▌ ● ● █ ◢◤ ◤□︵□▌ ╱ 公主病沒藥醫阿~
◣ ︵◢ ◣︵ █▌ ◢◤ ◣ □◢ ╱ ◤
◢ ▋ + ◤  ̄ ̄◣v◣ ◤ ◢◤ ◢ ▋ + ◤
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.132.181
※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1406817629.A.B06.html
※ 編輯: chieh0919 (114.44.132.181), 07/31/2014 22:45:37
推
08/02 09:33, , 1F
08/02 09:33, 1F
→
08/02 09:35, , 2F
08/02 09:35, 2F
→
08/02 09:40, , 3F
08/02 09:40, 3F
→
08/02 09:41, , 4F
08/02 09:41, 4F
→
08/02 10:03, , 5F
08/02 10:03, 5F