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

Self-referenced array with lazy evaluation

我正在玩 JavaScript 数组,不小心将一个数组推到了它自己。数组并没有因溢出异常而中断,而是懒洋洋地插入了对自身的引用,直到无限。在以下操作中:

x = [], x.push(x)

我相信将递归地插入对自身的引用,但不会中断运行时。它将生成无限表示:

并且浏览器永远不会冻结或中断,可能是因为单击时值为“"evaluated"”。

提前致谢。

  • 为什么会这样?

虽然图形表示可能显示无限 "arrays",但实际上您有一个递归的,因此,内存中只有 1 个 first 元素包含一个数组(但是只是指向一个的指针)。如果您将第二个成员添加到第一个数组,那么所有成员现在都应该显示相同的成员,因为它们是相同的。

  • V8如何处理循环引用?

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

  • 它在实际编程中有什么用处吗?

虽然 "sets" 表示的概念看起来不切实际,但您可以举个例子:

  1. 只包含自己的集合。
  2. 包含所有不包含任何内容的集合的集合(仅当所有其他集合包含其他内容时才填充自己)。
  3. 包含当前包含的集合的集合。

这些可以用于诸如分组控件之类的东西...

总的来说,自引用通常是 "non-sequitur",主要是因为在计算机中你已经有一个变量的引用(因此不需要额外的自引用)并且通常人们组织他们的程序来促进某些事情。 .. 要么减少操作,要么维护或他们喜欢的东西。