xng*_*tng 5 javascript pass-by-reference
在下面的JS代码中,为什么不将like didf3(arr2)的值更改为?有什么方法可以按预期工作(如果可能,不返回修改后的数组)?arr2f2(arr1)arr1f3
var arr1 = [1, 2, 3, 4];
var arr2 = [1, 2, 3, 4];
function f1() {
return [2, 3, 4, 5];
}
function f2(arr) {
arr.push(5);
}
function f3(arr) {
arr = f1();
}
f2(arr1);
console.log(arr1); // [ 1, 2, 3, 4, 5 ]
f3(arr2);
console.log(arr2); // [ 1, 2, 3, 4 ], expect [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
如果你想修改数组,那么你实际上必须修改数组。您不能只在变量上写入对不同数组的引用(因为这只会丢弃对该数组的本地引用)。
function f3(arr) {
arr.length = 0; // Empty the array
f1().forEach(function (currentValue) { arr.push(currentValue); });
}
Run Code Online (Sandbox Code Playgroud)