JavaScript中循环引用的用途是什么

时间:2019-01-21 04:29:04

标签: javascript object circular-reference

我一直想知道尽管存在内存泄漏,但是JavaScript中循环引用的用途是什么?浏览器中甚至window对象都被循环引用,就像window.window.window .....一样。我们为什么使用它以及在哪里可以使用它。它的优点是什么?

2 个答案:

答案 0 :(得分:2)

  

我想知道尽管有内存泄漏,

没有内存泄漏,两个互相引用但未链接的对象被垃圾回收了。 window对象将永远不会被收集,因此在这里也没关系。

  

javascript中循环引用的用途是什么?

与任何其他语言一样,它们可用于各种结构,例如树(父级<->子级),链表(左<->右)和多对多关系(学生<->类) 。如果没有它们,将会使某些形式的遍历变得复杂,并使程序运行速度大大降低。

  

为什么window.window是循环引用?

window不仅是一个对象,而且还是最终查找所有变量的最全局范围。当您使用任何全局变量时,例如setTimeout,它会在全局范围内查找,因此会在window对象中查找。

 window.setTimeout === /*window.*/setTimeout

现在,如果要引用全局对象,则必须在本身就是全局对象的全局范围中查找它。

 window.window === /*window.*/window

因此,仅window已经访问了循环引用,这就是为什么可以找到全局对象的原因。否则,window必须是保留关键字。

答案 1 :(得分:-1)

请参阅此页面,有很大的理由 Why window.window property exists?

  

让window属性指向对象本身的观点很可能使引用全局对象变得容易。否则,您将必须执行手动var窗口= this;作业位于脚本的顶部。

     

另一个原因是,没有此属性,您将无法编写,例如“ window.open('http://google.com/')”。您必须改为使用“ open('http://google.com/')”。

,也请参阅此答案 https://stackoverflow.com/a/35788599/1475257