作者fillano (冒牌费大公)
看板Ajax
标题Re: [问题] delete function object
时间Sat Feb 14 01:58:26 2009
※ 引述《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)
1F:→ fillano:你怎麽试出来bind的匿名函数仍然存在的? 02/14 03:28
2F:推 sweetpotatoa:恩...感谢解答,还有匿名函式那一句试问句,我试过node 02/14 08:08
3F:→ sweetpotatoa:被更新後bind的event会消失,只是想问看看它会不会像 02/14 08:09
4F:→ sweetpotatoa:具名函式一样没有被free掉 02/14 08:10