关于js中new一个对象内存释放的问题

新手上路,请多包涵

使用jQ给一个元素绑定一个事件,事件调用的匿名函数在执行完后会释放函数中的变量吗?

var test = function(args) {
    this._args = args;
    return this;
}

test.prototype.getArgs = function() {
    console.log(this._args);
}

$('#btn').on('click', function() {
    new test('This is Args').getArgs();
}

我就是想问下,当我点击id为btn的按钮执行函数后,函数中new的这个test对象实例会被释放吗?每新一个对象不都是创建新的内存吗?它还需要手动释放吗?
最主要的是我每次单击按钮都会new一次对象,我如果多次单击如不释放是不是会占用很多内存?

阅读 9.2k
2 个回答

只要创建的对象从window对象出发,可以被触达,就认为是被使用的,有用的的,JS引擎的GC回收机制就不会回收.
当回调函数被执行返回后。新创建的对应因为被有被引用,就将会被GC回收掉,而如果这个新对象引用的#btn对象,那么它就不会被释放,除非#btn被释放

@kikong 非常感谢,那我再问下,象这样是不是就得手动释放:

var test = function(element) {
    this._element = element;
    return this;
}

test.prototype.getArgs = function() {
    $(this._element).css('background', red);
    return this;
}

$('#btn').on('click', function() {
    var elm = new test(this).getArgs();
    elm = null; //这里是不是得手动设置一下来释放
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题