Javascript对象中的循环引用?

Javascript对象中的循环引用?,javascript,Javascript,有人能帮我理解为什么下面的代码会导致循环引用吗 var john = {}; var bob = {}; john.friend = bob; bob.friend = john; john = null; console.log(bob.friend); //{ friend: { friend: [Circular] } } 等 它在一个永无止境的圆圈中不断前进,每个对象都指向圆圈中的下一个对象,直到它回到起点(这非常快,因为这个圆圈只有两个成员) 从技术上讲,此答案中代码第一部分中的对

有人能帮我理解为什么下面的代码会导致循环引用吗

var john = {};
var bob = {};
john.friend = bob;
bob.friend = john;
john = null;
console.log(bob.friend); //{ friend: { friend: [Circular] } }

它在一个永无止境的圆圈中不断前进,每个对象都指向圆圈中的下一个对象,直到它回到起点(这非常快,因为这个圆圈只有两个成员)


从技术上讲,此答案中代码第一部分中的对象都与
john
不匹配,因为您
null
编辑了该变量。它们与
john
null
赋值之前保留的值相匹配

它在一个永无止境的圆圈中不断前进,每个对象都指向圆圈中的下一个对象,直到它回到起点(这非常快,因为这个圆圈只有两个成员)



从技术上讲,此答案中代码第一部分中的对象都与
john
不匹配,因为您
null
编辑了该变量。它们与
john
null
赋值之前保留的值相匹配。

这是因为对象引用,因为可以通过为两个对象创建一个新的引用(通过使用
object.assign
spread
)来避免

var john={};
var-bob={};
john.friend={……bob};
bob.friend={……john};

console.log(bob.friend)这是因为对象引用,因为可以通过为两个对象创建一个新引用来避免它(通过使用
object.assign
spread

var john={};
var-bob={};
john.friend={……bob};
bob.friend={……john};

console.log(bob.friend)它是循环的,因为两个对象都使用属性相互引用,所以它永远不会结束

另一方面,如果设置
john=null
,变量
john
将不再引用您的对象,但该对象仍将工作,因为john的引用将保存在内存中

var john={name:'john'};
var bob={name:'bob'};
约翰。朋友=鲍勃;
朋友=约翰;
john=null;
console.log(约翰);

console.log(bob.friend)它是循环的,因为两个对象都使用属性相互引用,所以它永远不会结束

另一方面,如果设置
john=null
,变量
john
将不再引用您的对象,但该对象仍将工作,因为john的引用将保存在内存中

var john={name:'john'};
var bob={name:'bob'};
约翰。朋友=鲍勃;
朋友=约翰;
john=null;
console.log(约翰);

console.log(bob.friend)鲍勃的朋友是约翰,约翰的朋友是鲍勃,鲍勃的朋友是约翰,约翰的朋友是鲍勃,听起来实际问题是“向我解释什么是循环引用”。?鲍勃的朋友是约翰,约翰的朋友是鲍勃,鲍勃的朋友是约翰,约翰的朋友是鲍勃,听起来实际问题是,“向我解释什么是循环引用”。。?
bob.friend === john
bob.friend.friend === bob
bob.friend.friend.friend === john
bob.friend.friend.friend.friend === bob
bob.friend.friend.friend.friend.friend === john
john = null;