Re: [問題] delete function object

看板Ajax作者 (冒牌費大公)時間16年前 (2009/02/14 01:58), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《sweetpotatoa (ㄏㄨㄢ。ㄕㄨˇ)》之銘言: : 假設我利用ajax去動態change我的頁面 : but每個頁面都有可能會需要一個function去處理某些事情 : 所以在load該頁面時也會load一個script片段進來 : 但是一旦load進來該script後 : browser就會建立該script內的所有物件 : 但是一旦我change到別的頁面是(用ajax) : 又會load新的頁面&script : 不過上一個頁面的object卻都還在(我用firebug看的) : 請問有沒有辦法把上一個頁面所create的function object全部free掉阿??? : 如果不free掉的話 : 那由ajax寫成的網頁(ex:gmail) : 不就會隨著時間增長,耗費越來越多的記憶體? : 有人想過這問題嗎? : 另外由用bind的匿名函式會不會隨著其所bind的對象被replace掉而自動free掉??? : 對了,我是用jquery去做的,他有相關的回收機制嗎??? : 謝謝:) 還是回文好了。 在javascript裡面,你程式所能用到的任何東西都是透過reference,變數裡面存放的 也是reference。 匿名函數如果沒有用closure把內部的函數拿到別處使用(例如bind給dom node或是 return然後assign給一個變數),那執行完後應該就可以回收了。 bind的對象沒了,自然bind給他的匿名函數理論上也會被free。不過jQuery有一個外掛 叫做live query,他會幫你維護bind給node的事件函數,即使你更新了內容,用特定 selector來bind的函數也不受影響。jQuery1.3把這個東西加入到核心,你用live()掛上 的函數不會因為更新node而受到影響。 你所說的狀況,我想還是要詳細看怎麼寫的才能確定。你有用live query或是jQuery1.3 的live event嗎? -- Sapere Aude! 這就是啟蒙運動的口號! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.166.83 ※ 編輯: fillano 來自: 60.248.166.83 (02/14 02:04)

02/14 03:28, , 1F
你怎麼試出來bind的匿名函數仍然存在的?
02/14 03:28, 1F

02/14 08:08, , 2F
恩...感謝解答,還有匿名函式那一句試問句,我試過node
02/14 08:08, 2F

02/14 08:09, , 3F
被更新後bind的event會消失,只是想問看看它會不會像
02/14 08:09, 3F

02/14 08:10, , 4F
具名函式一樣沒有被free掉
02/14 08:10, 4F
文章代碼(AID): #19bRJ68a (Ajax)
討論串 (同標題文章)
文章代碼(AID): #19bRJ68a (Ajax)