提问人:LongHike 提问时间:6/30/2022 最后编辑:E_net4LongHike 更新时间:6/30/2022 访问量:73
在 JavaScript 中传递值和内存消耗
Pass by value and memory consumption in JavaScript
问:
假设我得到了这个代码:
function MinMax(list) {
const min = Math.min(...list);
const max = Math.max(...list);
return {
min,
max,
list,
};
}
const massiveList = [
1,
// supposedly a gazillion
// integer values
10000000,
];
const minMax = MinMax(massiveList);
const minMaxList = minMax.list;
console.log('min ', minMax.min);
console.log('max ', minMax.max);
console.log('minMaxList length', minMaxList.length);
这是我的问题:由于参数在 JavaScript 中是通过值传递的,这是否意味着,在代码中将 minMax.list 分配给 minMaxList 的那个点之后,堆内存中存在原始 massiveList 的三个副本?
答:
2赞
Nick Vu
6/30/2022
#1
您可以尝试以下带有参考值的演示
const massiveList = [
1,
// supposedly a gazillion
// integer values
10000000,
];
const testReference = (list) => {
console.log(list === massiveList) //true
}
testReference(massiveList)
在您的情况下,并且是相同的参考,这意味着任何修改也将应用。list
massiveList
list
massiveList
...list
表示您已将原始列表克隆到另一个将在内存中新分配的列表。
下面的演示是显示新列表的参考值发生了变化,所以这就是结果的原因false
const massiveList = [
1,
// supposedly a gazillion
// integer values
10000000,
];
const testReference = (list) => {
const newList = [...list]
console.log(list === newList) //false
}
testReference(massiveList)
评论
0赞
LongHike
6/30/2022
谢谢,我没有考虑过检查对象相等性。这是一个非常简单而优雅的解决方案,可以找出对象的“化身”。
评论
process.memoryUsage().heapUsed
function f(...arr)
f