为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2021-11-12 15:49:02
我在 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 变量值,但是当我删除该函数时,所有显示都是正确的。请帮助我哪里出错了。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

这里有两件事结合在一起。

首先,数组是对象,因此“通过引用”传递。当您A在函数内部进行修改时,您实际上是在修改 中的同一个数组,而bin不是它的副本。

其次,浏览器控制台显示“活动”对象——当对象的内容发生变化时,控制台显示也会发生变化。

如果要捕获bin输出时的值,请尝试执行以下操作:

console.log(JSON.stringify(bin));


查看完整回答
反对 回复 2021-11-12
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号