2011-12-14 7 views

答えて

3

VS

new ImageUploadView(); 

JavaScriptでのオブジェクトへの参照がない場合、ガベージコレクタはそれをクリーンアップします。

ガベージコレクタの仕組みは、誰も参照していないjavascriptオブジェクトを探します。誰も参照を持たない場合は、再度使用することはできないため、削除して占有するメモリを再利用することができます。一方、まだjavascriptエンティティがオブジェクトへの参照を持っている場合、それはまだ "使用中"であり、削除することはできません。最初のコード例で

new ImageUploadView(); 

いくつかの他の変数やオブジェクトに離れたオブジェクトストアのコンストラクタthisポインタない限り、または、そこに、オブジェクトへの参照を保持させるいくつかの閉鎖を作成この新しいオブジェクトへの参照はなく、ガベージコレクタによってクリーンアップされます。

場合2番目のコード例:

var Iu = ImageUploadView(); 

限りIu変数が存在し、それが何であれImageUploadView()関数が返すが含まれています範囲内に留まるよう。 2番目の例では、関数を実行して値を格納するだけです。それは必ずしも何かを創り出すことではない。 ImageUploadView()がちょうどtrueを返す場合、それはすべてIu変数に含まれます。

+0

変数が存在する限り、その変数には変数が格納されます。とった。 ':P' –

+0

@ imeVidas - 私が言っていることをよりよく伝えるために、"範囲内にとどまる "を追加しました。 – jfriend00

+0

@jfriend - そうではありません。これをJavaScriptコンソールで実行します: '関数Obj(){return true; }; var o =新しいObj(); o == true; '。私のコンソールにはfalseが表示されます。 'new SomeFunction()'は 'SomeFunction()'の戻り値ではなく 'Object'を返します。 – gilly3

0

最初の方法は問題ありません。 ImageUploadViewのインスタンスがそれ自身の後で適切にクリーンアップされていると仮定すると、ガベージコレクタによって収集されます。

+0

戻り値はガベージコレクトされます。つまり、コンストラクタ自体ではありません。 –

+0

@ imeVidas - 確かに。私はいくつかの明確な言葉を加えました。 – gilly3

+0

@ gilly3、どうすれば "ImageUplaodView"が適切にクリーンアップされていることを確認できますか? – user847495

0

大きなオブジェクトの場合、ガベージコレクタに組み込まれているブラウザは、スコープ外になるとクリーンアップされると仮定することは必ずしも良い習慣ではありません。あなたは "削除"を使って自分自身をクリアする方が良いです。例:

delete MyImageUploadView; 

編集:プロパティとして参照されていない場合は、オブジェクトをnullに設定することが望ましい場合があります。

関連する問題