【发布时间】:2015-08-28 00:48:19
【问题描述】:
我正在阅读 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
为什么需要一个函数来创建深层副本?
【问题讨论】:
-
Why is a function required in order to create deep copies?- 因为这就是javascript的工作方式,改变它会破坏网络 -
该功能不是必须的,只是美观和可重用性
-
实际上并不是两个数组。您的“浅拷贝”根本不是真正的拷贝。我们不是说“两个数组指向内存中的相同位置”,而是两个变量指向(或:持有)同一个数组。如果需要,可以显式创建一个新数组,例如通过
.slice()或您的copy([], …)函数。
标签: javascript arrays oop object