我想知道尽管存在内存泄漏,但 JavaScript 中的循环引用有什么用?甚至浏览器中的 window
对象也是循环引用的,如 window.window.window .....
。我们为什么使用它以及我们可以在哪里使用它。它有哪些优点?
最佳答案
I was wondering despite of memory leak,
不存在内存泄漏,两个相互引用但未链接到其他任何地方的对象会被垃圾收集。 window
对象永远不会被收集,因此这里并不重要。
what is the use of a circular reference in javascript?
与任何其他语言一样,它们可用于各种结构,例如树(父 <-> 子)、链表(左 <-> 右)和多对多关系(学生 <-> 类(class)) 。没有它们会使某些形式的遍历变得复杂,并使程序显着变慢。
Why is window.window a circular reference?
window
不仅是一个对象,而且是最终查找所有变量的最全局范围。当您使用任何全局变量(例如 setTimeout
)时,它会在全局范围内查找,因此也会在 window
对象中查找。
window.setTimeout === /*window.*/setTimeout
现在,如果您想引用全局对象,则必须在全局范围内查找它,全局范围本身就是全局对象。
window.window === /*window.*/window
因此,只有window
已经访问了循环引用,这就是为什么可以找到全局对象的原因。否则 window
必须是保留关键字。
关于javascript - javascript中循环引用有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54283529/