具有惰性评估的自引用数组
Self-referenced array with lazy evaluation
我正在玩 JavaScript 数组,不小心将一个数组推到了它自己。数组并没有因溢出异常而中断,而是懒洋洋地插入了对自身的引用,直到无限。在以下操作中:
x = [], x.push(x)
我相信将递归地插入对自身的引用,但不会中断运行时。它将生成无限表示:
并且浏览器永远不会冻结或中断,可能是因为单击时值为“"evaluated"”。
- 为什么会这样?
- V8如何处理循环引用?
- 它在实际编程中有什么用处吗?
提前致谢。
- 为什么会这样?
虽然图形表示可能显示无限 "arrays",但实际上您有一个递归的,因此,内存中只有 1 个 first
元素包含一个数组(但是只是指向一个的指针)。如果您将第二个成员添加到第一个数组,那么所有成员现在都应该显示相同的成员,因为它们是相同的。
- V8如何处理循环引用?
我不知道它是否可以...但我知道 javascript 允许您编写无意义的代码。
- 它在实际编程中有什么用处吗?
虽然 "sets" 表示的概念看起来不切实际,但您可以举个例子:
- 只包含自己的集合。
- 包含所有不包含任何内容的集合的集合(仅当所有其他集合包含其他内容时才填充自己)。
- 包含当前包含的集合的集合。
这些可以用于诸如分组控件之类的东西...
总的来说,自引用通常是 "non-sequitur",主要是因为在计算机中你已经有一个变量的引用(因此不需要额外的自引用)并且通常人们组织他们的程序来促进某些事情。 .. 要么减少操作,要么维护或他们喜欢的东西。
我正在玩 JavaScript 数组,不小心将一个数组推到了它自己。数组并没有因溢出异常而中断,而是懒洋洋地插入了对自身的引用,直到无限。在以下操作中:
x = [], x.push(x)
我相信将递归地插入对自身的引用,但不会中断运行时。它将生成无限表示:
并且浏览器永远不会冻结或中断,可能是因为单击时值为“"evaluated"”。
- 为什么会这样?
- V8如何处理循环引用?
- 它在实际编程中有什么用处吗?
提前致谢。
- 为什么会这样?
虽然图形表示可能显示无限 "arrays",但实际上您有一个递归的,因此,内存中只有 1 个 first
元素包含一个数组(但是只是指向一个的指针)。如果您将第二个成员添加到第一个数组,那么所有成员现在都应该显示相同的成员,因为它们是相同的。
- V8如何处理循环引用?
我不知道它是否可以...但我知道 javascript 允许您编写无意义的代码。
- 它在实际编程中有什么用处吗?
虽然 "sets" 表示的概念看起来不切实际,但您可以举个例子:
- 只包含自己的集合。
- 包含所有不包含任何内容的集合的集合(仅当所有其他集合包含其他内容时才填充自己)。
- 包含当前包含的集合的集合。
这些可以用于诸如分组控件之类的东西...
总的来说,自引用通常是 "non-sequitur",主要是因为在计算机中你已经有一个变量的引用(因此不需要额外的自引用)并且通常人们组织他们的程序来促进某些事情。 .. 要么减少操作,要么维护或他们喜欢的东西。