【发布时间】:2015-08-28 19:39:29
【问题描述】:
我在玩 JavaScript 数组,不小心将一个数组推到了它自己的位置。该数组没有因溢出异常而中断,而是懒惰地插入了对自身的引用,该引用继续无限。在一个操作中:
x = [], x.push(x)
我相信会以递归方式插入对自身的引用,但不会在运行时中断。它将生成一个无限的表示:
并且浏览器永远不会冻结或中断,可能是因为点击时该值是“”“已评估”“”。
- 为什么会这样?
- V8 如何处理循环引用?
- 它在现实世界的编程中有什么用处吗?
提前致谢。
【问题讨论】:
-
不占用无限内存的无限结构并非天生就不稳定或无法使用。 V8 不需要做任何特殊的事情来处理循环引用 AFAIK。例如,这与将链表从前到后连接在一个环中并没有太大区别。我无法理解您为什么认为它不应该起作用。
-
或
x = {}; x.x = x;。
标签: javascript arrays lazy-evaluation