我有一个代码如下。
var t = [1, 2]; t[2] = t;
这将创建一个圆形阵列。在JavaScript中创建这个循环数组的算法是什么?
hmae6n7t1#
这里面没有算法只是你的数组引用了它自己。当一个变量或属性引用一个对象(数组是对象)时,变量中保存的是一个 object reference,它是一个值,告诉JavaScript引擎该对象在内存中的其他位置。你可以把它看作是一个数字,它唯一地标识了对象所在的内存位置。(这不是它是什么,但这是一个方便的方式来思考它。让我们看看代码。你开始:
var t = [1, 2];
这将创建一个数组并将其对象引用存储在t中。这在内存中创建了类似于下面的内容(为了清楚起见,省略了各种细节):
t
+−−−−−−−−−−−−−−−+ t:{Ref18465}−−−−−>| (array) | +−−−−−−−−−−−−−−−+ | length: 2 | | 0: 1 | | 1: 2 | +−−−−−−−−−−−−−−−+
我展示的Ref18465是对象引用的替代,我们从来没有在代码中直接看到过。我们有一个数组和一个变量,其中包含一个对象引用,说明数组的位置。然后你的代码会这样做:
Ref18465
t[2] = t;
这将向包含数组的对象引用的数组添加一个新元素,使其引用自身:
+−−−−−−−−−−−−−−−−−−−−−−+ | | \ +−−−−−−−−−−−−−−−+ | t:{Ref18465}−−−+−>| (array) | | +−−−−−−−−−−−−−−−+ | | length: 3 | | | 0: 1 | | | 1: 2 | | | 2: {Ref18465} |>−/ +−−−−−−−−−−−−−−−+
现在,t和t[2]都包含对数组的对象引用。正如你所说,数组引用自身。没有涉及到特定的算法,它只是一个循环的数据结构。
t[2]
1条答案
按热度按时间hmae6n7t1#
这里面没有算法只是你的数组引用了它自己。当一个变量或属性引用一个对象(数组是对象)时,变量中保存的是一个 object reference,它是一个值,告诉JavaScript引擎该对象在内存中的其他位置。你可以把它看作是一个数字,它唯一地标识了对象所在的内存位置。(这不是它是什么,但这是一个方便的方式来思考它。
让我们看看代码。你开始:
这将创建一个数组并将其对象引用存储在
t
中。这在内存中创建了类似于下面的内容(为了清楚起见,省略了各种细节):我展示的
Ref18465
是对象引用的替代,我们从来没有在代码中直接看到过。我们有一个数组和一个变量,其中包含一个对象引用,说明数组的位置。然后你的代码会这样做:
这将向包含数组的对象引用的数组添加一个新元素,使其引用自身:
现在,
t
和t[2]
都包含对数组的对象引用。正如你所说,数组引用自身。没有涉及到特定的算法,它只是一个循环的数据结构。