JavaScript-数组通过引用传递,但在重新分配时丢失

JavaScript-数组通过引用传递,但在重新分配时丢失,javascript,pass-by-reference,Javascript,Pass By Reference,在下面的JS代码中,f3(arr2)为什么不将arr2的值更改为像f2(arr1)那样更改为arr1?是否有办法使f3按预期工作(如果可能,不返回修改后的数组) 如果要修改数组,那么实际上必须修改数组。您不能只在变量上写入对不同数组的引用(因为这会丢弃对该数组的本地引用) 当您传递任何内容(无论是对象还是原语)时,javascript所做的只是在函数内部分配一个新变量。。。就像使用等号(=) 该参数在函数中的行为与仅使用等号指定新变量时的行为完全相同。。以这些简单的例子为例。 您可以参考:您可以

在下面的JS代码中,
f3(arr2)
为什么不将
arr2
的值更改为像
f2(arr1)
那样更改为
arr1
?是否有办法使
f3
按预期工作(如果可能,不返回修改后的数组)


如果要修改数组,那么实际上必须修改数组。您不能只在变量上写入对不同数组的引用(因为这会丢弃对该数组的本地引用)

当您传递任何内容(无论是对象还是原语)时,javascript所做的只是在函数内部分配一个新变量。。。就像使用等号(=)

该参数在函数中的行为与仅使用等号指定新变量时的行为完全相同。。以这些简单的例子为例。
您可以参考:

您可以通过一个步骤完成:

Array.prototype.splice.apply(arr, [0, arr.length].concat(f1()));
var arr1=[1,2,3,4];
var arr2=[1,2,3,4];
函数f1(){
返回[2,3,4,5];
}
功能f2(arr){
arr.push(5);
}
功能f3(arr){
Array.prototype.splice.apply(arr[0,arr.length].concat(f1());
}
f2(arr1);
document.write(''+JSON.stringify(arr1,0,4)+'');
f3(arr2);
document.write(''+JSON.stringify(arr2,0,4)+'')引用:“console.log(arr2);//[1,2,3,4],期望值[2,3,4,5]”

你没有得到你期望的东西的原因是这里的这部分

函数f3(*arr*){*arr*=f1();}

将数组[2,3,4,5]分配给函数f3的参数名arr,而不是分配给arr2。当然,在整个脚本中,Arr2保持不变并保持其原始状态

函数f3(*arr*){*arr2*=f1();}
将执行此操作


但这不是我的最终答案。这只是它看起来的样子

f3中的arr只是一个参考,您应该
拼接
或使用类似的
数组。prototype
方法来更改它引用的数组。这不是op所做的asking@BekimBacaj,op期望/询问的是什么?看起来,他期望一个JavaScript对象被分配给函数参数(arr)的(局部)变量名,在其全局arr2指向的指向方向上反映。他问为什么?答案是:您的本地指针无法更改它从中学习到的指针的指向方向。因为arr2只是告诉本地arr[1,2,3,4]对象的位置。您不能通过更改载体的内容来更改信息源。
function f3(arr) {
    arr.length = 0; // Empty the array
    f1().forEach(function (currentValue) { arr.push(currentValue); });
}
Array.prototype.splice.apply(arr, [0, arr.length].concat(f1()));