看板 Ajax 關於我們 聯絡資訊
大家好, 最近在看下面的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
sean2449:你第二個就是普通closure吧可以被回收 08/02 09:33
sean2449:Google的是假如我呼叫foo( myEle );然後myEle = null; 08/02 09:35
sean2449:myEle指到的物件不會被回收因為他被foo裡的element指到 08/02 09:40
sean2449:第一個的話b不被用到,所以function執行完就回收 08/02 09:41
sean2449:第一個不太確定就是或是跟browser有關? 08/02 10:03