具有惰性评估的自引用数组

时间:2015-08-28 19:39:30

标签: javascript arrays lazy-evaluation

我正在使用JavaScript数组,并且不小心将数组推送到自身。数组懒洋洋地插入对自身的引用,而不是打破溢出异常。在以下操作中:

x = [], x.push(x)

我会相信地插入对自身的引用,但是没有运行时中断。它将产生无限的表示:

enter image description here

浏览器永远不会冻结或破坏,因为价值是"""""""点击。

  • 为什么会这样?
  • V8如何处理循环引用?
  • 它在现实世界的编程中有什么用处吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  • 为什么会这样?

虽然图形表示可能显示无限的“数组”,但实际上你有一个递归的,所以,你在内存中只有1个first元素包含一个数组(但只是一个指向一)。如果向第一个数组添加第二个成员,则所有成员现在应该显示相同的成员,因为它们是相同的。

  • V8如何处理循环引用?

我不知道它是否可以......但我知道javascript允许你写出无意义的代码。

  • 它在现实世界的编程中有什么用处吗?

虽然看似不合理,但是“设置”表示的概念,例如你可以:

  1. 仅包含自身的集合。
  2. 包含所有不包含任何内容的集合的集合(当所有其他集合包含其他内容时仅填充自身。)
  3. 包含当前包含的集的集合。
  4. 这些可以用于分组控件......

    总的来说,自我反思通常是“非一般性的”,主要是因为在计算机中你已经对变量进行了反思(因此无需额外的自我反馈),并且通常人们组织他们的程序来促进某些事情......无论是更少的操作,还是维护,或者是他们所做的事情。