javascript - 关于 JS 垃圾回收的问题
阿神
阿神 2017-04-11 13:13:41
[JavaScript讨论组]

代码说明一切

核心代码

Q:

  1. 我 New 的这个对象会不会被回收?

  2. 如果不会被回收,那除了以下方法,有没有其他方法能让该对象被回收:

var a = new A();
a = null;

附上完整可运行代码:





    



    

Click ME!

阿神
阿神

闭关修行中......

全部回复(2)
PHP中文网
  1. 你的写法 a 会从内存中清理, 除非在事件绑定回调方法内调用了a实例

  2. 将.p从Dom树中删除, 因为绑定了事件, 所以并不会清除dom的内存
    当然, 如果是 jquery-1.3.x以上版本

$(elm).remove() // 该方法会移动事件绑定
因为该方法同时执行了:
jQuery.event.remove(elm);

所以, 如果是用$(elm).remove() 移除dom的, 自然会回收.
但如果有说一个UL, 里边有n个li,都绑定了事件
当 $("ul").html('') // 用该方法清空ul, 并不会回收li

所以, 回收不回收, 看你怎么用了

另外, 全局有DOM的引用, 也不会清, 看你的dom变量生存周期而定, 如:

var $p = $('<p>hello</p>');
// 添加到body
$p.appendTo("body");

// 移除
$p.remove();

// $p 还没有回收, 因为我还可以再次:
$p.appendTo("body"); // 又添加到了body

// ...
// 如果$p在函数闭包内, 且后面没有引用了, remove()会回收
// 如果$p在全局环境, 如 window.$p , 则永远不会回收
巴扎黑

先自答一个吧,想了一下,其实这就是一个闭包。
不过又有新问题了,如果我直接用下面方法,将实例化对象置空,并删除Dom对象,但并没有释放事件监听,那这个对象会不会被回收?

var a = A();
a.addListener();
a = null;
/*  将 .p 从 Dom 删除的代码...  */
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号