Javascript中的引用数组与值数组

Array by Reference vs Array by Value in Javascript

本文关键字:数组 引用 Javascript      更新时间:2023-09-26

我正在阅读O'reily的Data Structures and Algorithms with Javascript,上面写着:

浅拷贝(两个数组指向内存中的相同位置):

var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = nums;
nums[0] = 400;
print(samenums[0]); // displays 400

深拷贝:

function copy(arr1, arr2) {
for (var i = 0; i < arr1.length; ++i) {
arr2[i] = arr1[i];
}
}

现在,下面的代码片段产生预期的结果:

var nums = [];
for (var i = 0; i < 100; ++i) {
nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // displays 1

为什么需要一个函数来创建深度拷贝?

如评论中所述,该函数纯粹是为了美观和可重用性,并不是严格必要的。

你可以重构你的例子:

function copy(arr1, arr2) {
    for (var i = 0; i < arr1.length; ++i) {
        arr2[i] = arr1[i];
    }
}
var nums = [];
for (var i = 0; i < 100; ++i) {
    nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // displays 1

转换成这个等效的无函数示例:

var nums = [];
for (var i = 0; i < 100; ++i) {
    nums[i] = i+1;
}
var samenums = [];
for (var i = 0; i < nums.length; ++i) {
    samenums[i] = nums[i];
}
nums[0] = 400;
print(samenums[0]); // displays 1