2016-04-14 10 views
-1

私は、次のコードを持っている:ガベージコレクション

var o = (function() { 
    var o1 = {name: "o1"}; 
    var o2 = {name: "o2"}; 
    var o3 = {name: "o3"}; 

    o1.child = o2; 
    o2.child = o3; 
    o3.parent = o2; 

    setTimeout(function() { 
     o1.child = null; 
    }, 1000); 

    return o1; 
})(); 

は、オブジェクトo2、タイムアウトコールバックが終了後のガベージコレクションの対象o3ていますか?

答えて

4

このコードを関数内で実行すると、ローカル変数は有効範囲外になり、オブジェクトが指し示すオブジェクトはタイムアウトが発生した後にガベージコレクションに使用できるようになり、それらをリンクするチェーンが壊れるため、割り当てられたとおりにo1o

あなただけのグローバルスコープで実行されている機能の内容、例えば持っていたしかし、もし:

var o1 = {name: "o1"}; 
var o2 = {name: "o2"}; 
var o3 = {name: "o3"}; 

o1.child = o2; 
o2.child = o3; 

setTimeout(function() { 
    o1.child = null; 
}, 1000); 

を、その後o1o2o3は、すべてのグローバルオブジェクト(ブラウザでwindow)の性質ことと希望します個別にクリアする必要があります。

+0

ありがとうございました。私の更新コード –

+2

を参照してください。@ Maximusこれは質問の範囲を多少変更しました...あなたは一般的にそのような編集を避けるべきです –

+0

ええ、申し訳ありませんが、現在のものが正しいです。あなたは新しい例に基づいて答えますか? –

関連する問題