范围如何影响JavaScript中的可变声明



问题:

为什么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]都引用了同一对象。因此讨论

最新更新