问题:
为什么OBJ变量的声明必须移动到下面的"//移动到此处"位置,以正确产生{number:1,color:blue}和{编号:2,颜色:红色}对象?当声明停留在其当前位置下面时,数组会导致{数字:2,颜色:red},{编号:2,颜色:red}(即相同的对象,两次(
我的理解:
在当前位置,ARROBJ数组已使用OBJ的最新值进行更新,因此输出是一个数组,该数组列出了两次"数字:2,颜色:红色"。
混乱:
当OBJ声明移动到//移动到下面的情况时,这两个对象如何出现在数组中?如果对OBJ的每个更新进行了动态更新数组,为什么ARROBJ [0]未清除,然后在第二次声明OBJ时使用OBJ的新值进行更新?
function arrayOfObjects(array) {
var arrObj = [];
var obj = {};
for (i = 0; i < array.length; i++) {
//MOVE TO HERE
for (j = 0; j < array[i].length; j++) {
obj[array[i][j][0]] = array[i][j][1];
}
arrObj[i] = obj;
}
return arrObj;
}
var array = [ [ ['number', '1'], ['color', 'blue'] ] , ['number', '2'], ['color', 'red'] ] ]
arrayOfObjects(array);
在通过引用传递的JavaScript对象中可能发生。在这种情况下,意味着ARROBJ和OBJ在内存中引用了同一对象。因此,当在第二次迭代中已突变{数字:12,颜色:red} arlobj [0]和Arrobj [1]都引用了同一对象。因此讨论