インスタンスを自分自身で破棄する必要はありますか? ...私はそれらに変数を割り当てなければ...彼らは自動的に離れますか?ブラウザのJavaScriptのガベージコレクションはどのように機能しますか?
var Iu = ImageUploadView();
インスタンスを自分自身で破棄する必要はありますか? ...私はそれらに変数を割り当てなければ...彼らは自動的に離れますか?ブラウザのJavaScriptのガベージコレクションはどのように機能しますか?
var Iu = ImageUploadView();
VS
new ImageUploadView();
JavaScriptでのオブジェクトへの参照がない場合、ガベージコレクタはそれをクリーンアップします。
ガベージコレクタの仕組みは、誰も参照していないjavascriptオブジェクトを探します。誰も参照を持たない場合は、再度使用することはできないため、削除して占有するメモリを再利用することができます。一方、まだjavascriptエンティティがオブジェクトへの参照を持っている場合、それはまだ "使用中"であり、削除することはできません。最初のコード例で
:
new ImageUploadView();
いくつかの他の変数やオブジェクトに離れたオブジェクトストアのコンストラクタthis
ポインタない限り、または、そこに、オブジェクトへの参照を保持させるいくつかの閉鎖を作成この新しいオブジェクトへの参照はなく、ガベージコレクタによってクリーンアップされます。
場合2番目のコード例:
var Iu = ImageUploadView();
限りIu
変数が存在し、それが何であれImageUploadView()
関数が返すが含まれています範囲内に留まるよう。 2番目の例では、関数を実行して値を格納するだけです。それは必ずしも何かを創り出すことではない。 ImageUploadView()
がちょうどtrue
を返す場合、それはすべてIu
変数に含まれます。
変数が存在する限り、その変数には変数が格納されます。とった。 ':P' –
@ imeVidas - 私が言っていることをよりよく伝えるために、"範囲内にとどまる "を追加しました。 – jfriend00
@jfriend - そうではありません。これをJavaScriptコンソールで実行します: '関数Obj(){return true; }; var o =新しいObj(); o == true; '。私のコンソールにはfalseが表示されます。 'new SomeFunction()'は 'SomeFunction()'の戻り値ではなく 'Object'を返します。 – gilly3
最初の方法は問題ありません。 ImageUploadView
のインスタンスがそれ自身の後で適切にクリーンアップされていると仮定すると、ガベージコレクタによって収集されます。
戻り値はガベージコレクトされます。つまり、コンストラクタ自体ではありません。 –
@ imeVidas - 確かに。私はいくつかの明確な言葉を加えました。 – gilly3
@ gilly3、どうすれば "ImageUplaodView"が適切にクリーンアップされていることを確認できますか? – user847495
大きなオブジェクトの場合、ガベージコレクタに組み込まれているブラウザは、スコープ外になるとクリーンアップされると仮定することは必ずしも良い習慣ではありません。あなたは "削除"を使って自分自身をクリアする方が良いです。例:
delete MyImageUploadView;
編集:プロパティとして参照されていない場合は、オブジェクトをnullに設定することが望ましい場合があります。
はい、ガベージコレクションされています。オブジェクトは、少なくとも1つの参照が存在する限り存在します。 –