我开始涉足Javascript,并且在尝试在那里进行面向对象的编程时,我担心内存泄漏。

如果我执行以下操作:

function ObjectOne() {
  this.setRelation = function(objectTwo) {
    this.objectTwo = objectTwo;
  }
}

function ObjectTwo() {
  var self = this;
  self.setRelation = function(objectOne) {
    this.objectOne = objectOne;
    objectOne.setRelation(self);
  }
}

var objOne = new ObjectOne();
var objTwo = new ObjectTwo();
objTwo.setRelation(objOne);


...这会在Javascript中创建一个引用循环,从而可能导致内存泄漏吗?

第二个问题是,当您关闭浏览器的选项卡时,是否会消除此引用循环?

最佳答案

否。来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management


  截至2012年,所有现代浏览器均附带标记清除垃圾收集器。


标记清除垃圾收集器可以处理参考周期。

新的Map类型非常注意避免使用Ephemerons弱引用循环变得困难。见https://vimeo.com/9965316

10-08 14:50