这是内存泄漏吗?在javascript中

时间:2011-01-15 09:22:11

标签: javascript performance

(function () {

    //create object with two initail properties
    var obj = {};
    obj.a = { a1: 1, a2: 2 };
    obj.b = { b1: 1, b2: 2 };

    //create a new property 'c' and refer property 'a' to it
    obj.c = obj.a;

    //cyclic reference
    obj.a = obj.b;
    obj.b = obj.a;



    //this function removes a property from the object
    // and display all the three properties on console, before and after.
    window.showremoveshow = function () {

        console.log(obj.a, '-----------a');
        console.log(obj.b, '-----------b');
        console.log(obj.c, '-----------c');

        //delete proprty 'a'
        delete obj.a;

        //comes undefined
        console.log(obj.a, '-----------a'); 

        //displays b
        console.log(obj.b, '-----------b'); 

        //still displays the initial value obj.a
        console.log(obj.c, '-----------c'); 
    }

})();

现在:删除obj.a并检查obj.c的值后,我们发现了 obj.c仍然是指obj.a的初始值,但是obj.a本身并不存在。这是一个内存泄漏。删除obj.a并且其初始值仍然存在。

编辑:这意味着,就像我们删除属性(obj.a)一样,即使之后它仍然存在。这可以在obj.c中看到。

2 个答案:

答案 0 :(得分:1)

这不是内存泄漏。 obj.c只保存分配给obj.a的值的副本。

答案 1 :(得分:0)

删除只删除引用,这就是发生的事情。完整答案也在这里:

Deleting Objects in JavaScript

如果你有时间,请检查:)

http://perfectionkills.com/understanding-delete/