ごみ

2016-11-03 1 views
0

のは、私は次の関数があるとしましょう:私は、もはや任意のデータを必要とする機能の終了時ごみ

function myfunc() { 
    var data = []; 

    for (var i=0; i<10; i++) { 
     data[i] = {foo:"bar"}; 
    } 

    // do something with data 
} 

を。それが解放されるためには何が必要でしょうか?

私が知る限り、グローバルオブジェクトから到達できないものはGCedされます。 dataに到達できない場合、dataが唯一の参照であるため、内部のすべての要素に到達できません。それで、dataとその中のすべてをGCableにする正しい方法は何ですか?

data = null私は機能の最後に置いておけばいいですか?

私は何かをする必要がありますか? dataはローカル変数myfunc()であるため、関数が完了すると破壊されるべきではないので、データはdata GCableになりますか?

答えて

2

はい、何もする必要はありません。

範囲外になったオブジェクトへの他の参照がない場合、それらはガベージコレクションされます。

これらの他の参考文献は、予期せぬ場所(関数呼び出しから生き残った偶発的なクロージャやブラウザのDOMへのものなど)から来る可能性がありますが、一般的には非常に確実に機能します。それは基準サイクルも処理します。