Javascript对象';s属性保存自身并创建一个奇怪的循环

Javascript对象';s属性保存自身并创建一个奇怪的循环,javascript,javascript-objects,Javascript,Javascript Objects,我有一个对象(比如说a),它有一个属性(比如说b),该属性是它的父属性。大概是这样的: a:{ a1:a2, b:{ b1:b2, b3:a } } 它创建了一种奇怪的无限长对象,一次又一次地保存自己,这是我通过使用chrome的调试器发现的 但我这里的问题是,尽管如此,该程序从未崩溃,运行得如此顺利,没有任何挂起或其他东西,甚至在非常糟糕的笔记本电脑上(没有GPU)。程序是如何做到这一点的 a.b.b3是对a的引用,而不是复制,这是JavaScript中传递对象的方式。它相当于指针。对象可以

我有一个对象(比如说
a
),它有一个属性(比如说
b
),该属性是它的父属性。大概是这样的:

a:{
a1:a2,
b:{
b1:b2,
b3:a
}
}
它创建了一种奇怪的无限长对象,一次又一次地保存自己,这是我通过使用chrome的调试器发现的


但我这里的问题是,尽管如此,该程序从未崩溃,运行得如此顺利,没有任何挂起或其他东西,甚至在非常糟糕的笔记本电脑上(没有GPU)。程序是如何做到这一点的

a.b.b3
是对
a
的引用,而不是复制,这是JavaScript中传递对象的方式。它相当于指针。对象可以无限期地遍历这一事实并不意味着它占用无限的内存。如果您想看到您正在处理内存中的同一个对象,可以执行类似于
a.b1='someother'并再次尝试遍历它。即使你深入到层次结构中,这种变化也会反映出来,因为你要在内存中遍历同一个对象。

我的猜测是,所有东西都是通过引用传递的——因此,尽管这是一个疯狂的无限循环,信息不会被无限次地复制。这是一个使用内存指针的自引用数据结构。仅供参考,
窗口
对象本身就是这样一个自引用对象。这很好,因为它只是引用,而不是副本,但是如果你的程序在没有任何自引用检查的情况下开始在结构上迭代,你会遇到问题。所以这是一个循环,但不会多次保存信息。所以这就像我一遍又一遍地重复同一块内存,就像一个循环?