以单行动态设置嵌套对象

时间:2015-07-19 16:58:52

标签: javascript object

我对以下代码有疑问。我正在创建一个嵌套对象,我想在一个简短的线条中创建它。我从这个answer here得到了这个想法。我也没有计划将此代码用于生产。我被警告temp'可能'是一个泄漏。这只是我能够生成的一个例子。我理解newSeasonstemp被分配给内存中的同一个对象,这就是为什么所有这一切都可能的原因。

这实际上是在造成内存泄漏吗?

有问题的一行是:

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);

1 个答案:

答案 0 :(得分:4)

由于您未将temp声明为var temp,因此您实际上已分配给window.temp,即分配给全局变量(假设我们在浏览器中讨论JS)。除非您明确删除全局引用或重新分配对象,否则不再需要对象进行垃圾回收。

编辑:这本身并不是“内存泄漏”:每次调用该函数时,都会重用相同的全局引用,因此不存在逐渐锁定可用空间的风险无用的数据。但是,它构成了对资源的次优使用。