javascript - javascript中循环引用有什么用

标签 javascript object circular-reference

我想知道尽管存在内存泄漏,但 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/

相关文章:

javascript - 通过 Ajax 在 JavaScript 中使用来自 PHP 的数据

java - 独特的 Java 和 Javascript 交织行为

c++ - C++中的动态对象

java - 大型循环引用和 JVM 垃圾收集器

c++ - 为什么这个循环模板实例化是合法的?

javascript - 在评论投票系统中使用一张图像加载器 gif

javascript - Python 与 Javascript 日期时间

javascript - 在javascript中将JSON对象添加到多维数组

Java 调用对象问题

c++ - 不调用带有 shared_from_this 的相互递归类的析构函数