前端 - 请用javascript这种情况是否需要手动释放对象
天蓬老师
天蓬老师 2017-04-10 15:07:33
[JavaScript讨论组]

前端用了Pjax,每次跳转完一个页面(没有刷新),会执行回调,回调里会调用新页面的init()初始化。

function callback() {
    //这里用的是jQuery的Remove来删除原先页面的DOM
    容器.children().remove();
    新页面.init();
}

假设我在A页面的init()里创建一个对象:

function A页面的init() {
    //Demo内部会为element绑定各种事件
    var demo = new Demo({ 
        element: $(...)
    });

    //demo对象会在其他操作中使用到,所以不会在init后释放
    event.on("其他操作", function() { 
        demo.abc();
    });
}

现在我跳转到B页面,$element已经随着父元素在回调里删除了,那么$element对象还在吗?demo对象还在吗?是否需要手动释放呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
黄舟

event.on使得demo对象被'event'使用,demo又使用了element对象。 所以element对象是否被释放, 要看event对象是否已经被释放。 如果event对象也已经释放了, 那么element会在一个合适的时机被垃圾回收。

chrome 的 devTools中的Profiles可以查看内存的变化情况, 可以学着去使用。

巴扎黑

chrome debug 或者 console.log打印,如果存在,不需要了,就删

大家讲道理

remove完成后,虚拟机会在适当的时候执行垃圾回收的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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