在javascript中创建循环数组的算法是什么?

bnlyeluc  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(106)

我有一个代码如下。

var t = [1, 2];
t[2] = t;

这将创建一个圆形阵列。在JavaScript中创建这个循环数组的算法是什么?

hmae6n7t

hmae6n7t1#

这里面没有算法只是你的数组引用了它自己。当一个变量或属性引用一个对象(数组是对象)时,变量中保存的是一个 object reference,它是一个值,告诉JavaScript引擎该对象在内存中的其他位置。你可以把它看作是一个数字,它唯一地标识了对象所在的内存位置。(这不是它是什么,但这是一个方便的方式来思考它。
让我们看看代码。你开始:

var t = [1, 2];

这将创建一个数组并将其对象引用存储在t中。这在内存中创建了类似于下面的内容(为了清楚起见,省略了各种细节):

+−−−−−−−−−−−−−−−+
t:{Ref18465}−−−−−>|    (array)    |
                  +−−−−−−−−−−−−−−−+
                  | length: 2     |
                  | 0: 1          |
                  | 1: 2          |
                  +−−−−−−−−−−−−−−−+

我展示的Ref18465是对象引用的替代,我们从来没有在代码中直接看到过。我们有一个数组和一个变量,其中包含一个对象引用,说明数组的位置。
然后你的代码会这样做:

t[2] = t;

这将向包含数组的对象引用的数组添加一个新元素,使其引用自身:

+−−−−−−−−−−−−−−−−−−−−−−+
              |                      |
              \   +−−−−−−−−−−−−−−−+  |
t:{Ref18465}−−−+−>|    (array)    |  |
                  +−−−−−−−−−−−−−−−+  |
                  | length: 3     |  |
                  | 0: 1          |  |
                  | 1: 2          |  |
                  | 2: {Ref18465} |>−/
                  +−−−−−−−−−−−−−−−+

现在,tt[2]都包含对数组的对象引用。正如你所说,数组引用自身。没有涉及到特定的算法,它只是一个循环的数据结构。

相关问题