Javascript ガベージ コレクション / メモリ リークに関する質問があります。OS X 10.8.4 で Chrome 28.0.1500.71 を使用しています。
次のコードは、保持されていたスペースの割り当てを解除することはありません。そのme
理由はわかりません。
var MyClass = function() {
this.x = 1;
var self = this;
this.do_thing = function() {
self.x++;
};
};
MyClass.prototype.destroy = function() {
delete this.do_thing;
};
var me = new MyClass();
me.do_thing();
me.destroy();
me = null;
// the MyClass object formerly known as 'me' is still allocated here
// (as evidenced by Chrome's heap profiler)
Chrome は、式によって作成されたnew MyClass()
オブジェクト (me
に設定される前に指していたオブジェクトnull
) をメモリに保持しているself
ようme.do_thing()
です。しかし、私は への呼び出しを考えていたでしょう。これは、コンストラクターのスコープ内の変数destroy()
を unsetすると (呼び出しで) 破棄されます。me.do_thing
self
new MyClass()
Underscore.JS の_.bind
関数も使用してみましたが、ここで説明されている未解決の問題に遭遇しました。