JavaScript中的循环引用示例

如果两个单独的对象相互传递引用,则会发生循环引用。

在较旧的浏览器中,循环引用是导致内存泄漏的原因。随着垃圾收集算法的改进,该算法现在可以很好地处理循环和循环依赖性,这不再是问题。

但是,从纯粹的设计角度来看,循环引用仍然是一件不好的事情,并且有代码臭味。循环引用意味着彼此引用的2个对象紧密耦合,对一个对象的更改可能还需要对其他对象进行更改。

假设您有2个对象,“狗”和“人”。您希望能够仅使用dog对象来引用狗的所有者,而使用person对象来引用人的宠物。

let dog = new Dog();
let person = new Person();
//创建一个循环引用
dog.owner = person
person.pet = dog

在大多数情况下,您只需要访问一个对象并从该对象派生另一个对象。因此您可以断开其中一个链接。如果不是,则可以使用映射在相反的情况下映射对象。但是,与其使用hack,不如使用循环引用。