提问人: 提问时间:6/21/2022 最后编辑:Mister Jojo 更新时间:6/21/2022 访问量:49
使用数组 [duplicate] 通过引用传递
pass by reference with array [duplicate]
问:
如果我改变 within 的值,则更新新的:myArray
myFunction
myArray
let myArray = [1, 2, 3];
console.log( JSON.stringify(myArray) ); // [1, 2, 3]
function myFunction(arr) {
arr.push(4);
console.log( JSON.stringify(arr) ); // [1, 2, 3, 4]
return arr;
}
myFunction(myArray);
console.log( JSON.stringify(myArray) ); // [1, 2, 3, 4]
.as-console-wrapper {max-height: 100% !important;top: 0;}
.as-console-row::after {display: none !important;}
但是,如果我尝试重新分配 within ,则保持不变。myArray
arr = [0];
myFunction
myArray
let myArray = [1, 2, 3];
console.log( JSON.stringify(myArray) );; // [1, 2, 3]
function myFunction(arr) {
arr = [0];
console.log( JSON.stringify(arr) ); // [0]
return arr;
}
myFunction(myArray);
console.log( JSON.stringify(myArray) ); // [1, 2, 3]
.as-console-wrapper {max-height: 100% !important;top: 0;}
.as-console-row::after {display: none !important;}
为什么在上面的示例中不能重新分配,但如果我这样做可以:myArray
let myArray = [1, 2, 3];
myArray = [0];
console.log(myArray); // [0]
答:
-1赞
Scott
6/21/2022
#1
在您的示例中,您实际上并没有重新分配 .你需要做.myArray
myArray = myFunction(myArray)
评论
0赞
t.niese
6/21/2022
OP 假设它是通过引用传递的(但事实并非如此),如果是这样的话,那么它只是对 的引用,所以分配给 也会改变。这是一个经常发生的误解。myArray
arr
myArray
arr
myArray
0赞
Mister Jojo
6/21/2022
#2
您将链接到数组内部元素的寻址与数组本身的寻址混淆了
let myArray = [1, 2, 3];
在内存中创建一个数组对象,并在
变量上给出他的地址[1, 2, 3]
myArray
function myFunction(arr)
创建一个新变量,该变量以变量地址的副本命名arr
myArray
以同样的方式,你有:
let myArray = [1, 2, 3]
let arr = myArray
arr = [0]
console.log( JSON.stringify(myArray) ) // [1, 2, 3]
console.log( JSON.stringify(arr) ) // [0]
.as-console-wrapper {max-height: 100% !important;top: 0;}
.as-console-row::after {display: none !important;}
评论
arr
myArray
arr
myArray
arr
arr
myArray