2017-08-30 22 views
0

.length = 0で問題が見つかりました。= []に変更すると、javascriptプロジェクトですべてのことがうまく機能しています。javascriptでポインタ変数が消えるのはいつですか?

var arr = [1,2,3,4,5]; 
alert(arr); 
arr = []; 
alert(arr); 
arr.length = 0; 
alert(arr); 

しかし、私はarr = []を使用する場合は、[1,2,3,4,5]のメモリが消えたとき、私は、一つの質問がありますか?配列が大きく、[]を何度も使用すると、メモリ不足の問題が発生します。

+0

*「.length = 0'」で問題が見つかりました。 –

+0

私のスタックの問題を見ることができます。https://stackoverflow.com/questions/45924788/angular-appending-is-fast-but-destroying-is-slow1-secondここでは、.length = 0を[]に変更し、問題 –

答えて

0

[1,2,3,4,5]のメモリが消えるときにarr = []を使用すると1つの質問がありますか?

JavaScriptエンジンがリリースされるたびに、必要に応じて何もしなくなり、もう何も参照しなくなります。詳細は、関連するJavaScriptエンジンだけでなく、そのコードの表示場所と実行頻度(たとえば、どれほど積極的に最適化されるかなど)によって異なります。それが重要な場合(例えば、それが多く実行されている場合)、それは本当に迅速に回収されます。

+0

あなたの答えに応じて、なぜこの投稿が利用できるのかを記述したいと思います。https://stackoverflow.com/questions/4804235/difference-between-array-length-0-and-array –

+0

@artgb:私はあなたのコメントの質問を理解していない...? –

+0

あなたはarr = []を使うとメモリ空間が自動的に消え、.length = 0が必要な理由は? –

0

さまざまなJavascriptエンジンがどのようにガベージコレクションを実行するかについての質問があります。彼らはそれぞれ少しずつ異なっているが、クリーンアップメモリ​​を割り当てられるようにする鍵は、元の配列に残っている(クロージャまたは非同期呼び出しを含む)参照が残っていないことを確認することです。

スタックがまだスタック上にあるか、クロージャ内にある別の関数にその配列が渡された場合は、処理が複雑になります。

関連する問題