3

JavaScript で変数の設定を解除する必要がありますか? その理由は?

たとえば、PHP では、すべての種類のループですべての一時変数の設定を解除して、メモリを解放し、変数の重複を避けることをお勧めします。

とにかく、phpによると-変数の設定を解除する利点は何ですか? 質問:

変数の設定を解除しても、実際には実行時のメモリ消費量が減少しないというのは本当ですか? -はい

それで、私たちはすべきdelete window.some_var;ですか?

または、使用する必要がありますsome_var = nullか?

それとも、追加の CPU サイクルを避けるために変数の設定を解除すべきではありませんか?


UPD: 関連する質問:

Javascript変数の設定を解除するには?

JavaScript オブジェクトからプロパティを削除する方法

4

3 に答える 3

3

いいえ、使い終わった変数を削除する必要はありません。非常に多くの巨大なグローバル変数があり、これが実際に問題になる場合は、設計を再考する必要があります。

はい、それは PHP でもばかげています。いいえ、「追加の CPU サイクル」を回避することとは何の関係もありません。

具体的には:

  • 「ループ内の一時変数の設定解除」</p>

    それらは一時的なものであり、おそらく a) 整数または b) 整数とほぼ同じスペースを占める参照のいずれかです。気にしないでください。

  • 「変数の重複を避ける」</p>

    再び - 参照。他の場所でまだ参照されているものを設定しても意味がありませんnull

散らかっていると感じたら、それはより多くのことが範囲外になる (つまり、より多くの関数を使用する) べきであるという良い兆候です。

あなたが言及していない他のほとんどの場合、エンジンはあなたのものを適切に管理するのに十分スマートです. 時期尚早に最適化しないでください。

于 2013-10-17T01:38:13.313 に答える
3

いいえ、さらに、場合によっては、グローバル スコープ内の変数を削除できません。varキーワードを使用して適切に宣言された変数は削除できません (一方、暗黙のグローバル変数は削除できます。変数を宣言するには、常に var キーワードを使用してください)。

また、JavaScript エンジンにはガベージ コレクターと呼ばれるものがあり、コードが「実行中」のときに、使用されなくなった、またはどこかで参照されなくなった変数を自動的に探します。見つけたら、すぐにアビスに押し込みます (メモリ内の変数を削除します)。

于 2013-10-17T03:07:50.427 に答える
1

David Flanagan は、彼の著書JavaScript: The Definitive Guideでこれに非常にうまく答えています。

JavaScript インタープリターは、メモリ管理のために自動ガベージ コレクションを実行します。これは、プログラムが必要に応じてオブジェクトを作成できることを意味し、プログラマーはそれらのオブジェクトの破棄や割り当て解除について心配する必要はありません。オブジェクトに到達できなくなった場合、つまりプログラムがそのオブジェクトを参照する方法がなくなった場合、インタプリタはそのオブジェクトが二度と使用できないことを認識し、占有していたメモリを自動的に回収します。

これは、JavaScript でメモリ リークが発生しないという意味ではありません。それからはほど遠い。循環 (または循環) 参照は、参照カウントを実装するブラウザーで頻繁に発生する問題です

循環参照は、2 つのオブジェクトが相互に参照するときに形成され、各オブジェクトの参照カウントは 1 になります。純粋にガベージ コレクション システムでは、循環参照は問題になりません。関連するオブジェクトがいずれも他のオブジェクトから参照されていない場合、循環参照は問題になりません。どちらもガベージ コレクションです。ただし、参照カウント システムでは、参照カウントがゼロになることはないため、どちらのオブジェクトも破棄できません。ガベージ コレクションと参照カウントの両方が使用されているハイブリッド システムでは、システムが循環参照を識別できないため、リークが発生します。この場合、DOM オブジェクトも JavaScript オブジェクトも破棄されません。リスト 1 は、JavaScript オブジェクトと DOM オブジェクトの間の循環参照を示しています。

Web サイトに JavaScript のメモリ リークが含まれているのではないかと心配している場合、Google には「JavaScript のリーク ファインダー」という適切な名前のツールがあり、原因を見つけるのに役立ちます。

さらに読む: JavaScript ガベージ コレクションとは

于 2013-11-01T13:48:22.643 に答える