猿问

奇怪的行为 传递和多维数组作为 JavaScript 函数的输入会改变数组的实际值吗?

我在 JavaScript 中创建了一个多维数组类型的变量,并在发送到函数之前对其进行了控制台,但它在控制台上显示了错误的输出,但是如果我删除该函数,则一切正常


function ROT(a, d) {

    return a ^ d;

}


function thetha_step(A) {


    const C = [];

    const D = []; 

    //C[x] part 

    for (let x=0; x<5; x++) {

         C[x] = A[x][0];

         for (let y=1; y<5; y++) {

            C[x] = C[x] ^ A[x][y];

         }

    }


    //D[x] part

    D[0] = C[4] ^ ROT(C[1], 1);

    for (let x=1; x<5; x++) {

       D[x] = C[x-1] ^ ROT(C[x+1], 1);

    }


    //A[x,y]

    for (let x=0; x<5; x++) {

         for (let y=0; y<5; y++) {

             A[x][y] = A[x][y] ^ D[x];

         }

    }


    return A;

}



var bin= [

    [1, 0, 0, 0, 1],

    [0, 1, 0, 0, 0],

    [0, 0, 1, 1, 1],

    [1, 0, 1, 1, 1],

    [1, 0, 1, 0, 1]

];



console.log(bin);


console.log(thetha_step(bin));

# Outputs as #


(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]

0: (5) [2, 3, 3, 3, 2]

1: (5) [2, 3, 2, 2, 2]

2: (5) [1, 1, 0, 0, 0]

3: (5) [2, 3, 2, 2, 2]

4: (5) [1, 0, 1, 0, 1]


(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]

0: (5) [2, 3, 3, 3, 2]

1: (5) [2, 3, 2, 2, 2]

2: (5) [1, 1, 0, 0, 0]

3: (5) [2, 3, 2, 2, 2]

4: (5) [1, 0, 1, 0, 1]


我不明白为什么它没有显示正确的 bin 变量值,但是当我删除该函数时,所有显示都是正确的。请帮助我哪里出错了。


哆啦的时光机
浏览 172回答 1
1回答

largeQ

这里有两件事结合在一起。首先,数组是对象,因此“通过引用”传递。当您A在函数内部进行修改时,您实际上是在修改 中的同一个数组,而bin不是它的副本。其次,浏览器控制台显示“活动”对象——当对象的内容发生变化时,控制台显示也会发生变化。如果要捕获bin输出时的值,请尝试执行以下操作:console.log(JSON.stringify(bin));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答