我对以下代码有疑问。我正在创建一个嵌套对象,我想在一个简短的线条中创建它。我从这个answer here得到了这个想法。我也没有计划将此代码用于生产。我被警告temp
'可能'是一个泄漏。这只是我能够生成的一个例子。我理解newSeasons
和temp
被分配给内存中的同一个对象,这就是为什么所有这一切都可能的原因。
这实际上是在造成内存泄漏吗?
有问题的一行是:
var newSeasons = temp = {}; temp[yr] = data;
您可以测试code here。
function parseData (yr, stat, data) {
// The way I've been taught
var oldSeasons = {};
oldSeasons[yr] = data;
console.log('The way Ive been taught\n');
console.log(oldSeasons);
console.log('\n****************************\n');
// Experimental way
var newSeasons = temp = {}; temp[yr] = data;
console.log('Experimental way');
console.log(newSeasons);
}
var data = {
Pos: '1B',
Age: '33',
G: '116',
stat:'batting',
yr: '2005',
H:'89',
R: '42',
RBI: '48'
};
parseData(data.yr,data.stat,data);
答案 0 :(得分:4)
由于您未将temp
声明为var temp
,因此您实际上已分配给window.temp
,即分配给全局变量(假设我们在浏览器中讨论JS)。除非您明确删除全局引用或重新分配对象,否则不再需要对象进行垃圾回收。
编辑:这本身并不是“内存泄漏”:每次调用该函数时,都会重用相同的全局引用,因此不存在逐渐锁定可用空间的风险无用的数据。但是,它构成了对资源的次优使用。