2011-01-15 5 views
0
(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がまだ存在するのdoesntしかし自体obj.a、obj.aの初期値を参照することがわかります。これはメモリリークですか? obj.aは削除され、その初期値はまだ存在します。このメモリリークはありますか? JavaScriptの

編集:これは、プロパティ(obj.a)を削除したようなことですが、その値は後でも存在します。 obj.cで見ることができる。

+0

リークではありません。オブジェクトは変数に「生きていません」、javascriptのオブジェクトはすべて参照オブジェクトです。オブジェクトは参照がある限り、最後の参照が終了するとガベージコレクションされます。 –

答えて

1

メモリリークではありません。 obj.cには、obj.aに割り当てられた値のコピーのみが保持されます。

関連する問題