2017-04-20 8 views
1

同じオブジェクト名を再作成すると、オブジェクトのリテラルに空きメモリがありますか?オブジェクトリテラルから同じオブジェクト名を再作成すると、メモリにどのような影響がありますか?例えばオブジェクトのリテラルメモリのパフォーマンス

var objLit = {}; 
for(var i=0; i<5; i++){ 
    objLit['room'] = {}; 
    objLit['room'].name = "A", 
    objLit['room'].class = 10 
} 

console.log(objLit['room']); 

出力currectあるが、どのような約4プレビューはforループによって作られるオブジェクトリテラル。私の質問:

is all 4 object auto delete? is all 4 object reference auto delete?

+0

ループの各パスで新しいオブジェクトで 'objLit.room'を上書きしています。あなたは配列が必要です。 – PHPglue

+0

配列は整数キーのみを受け入れます。私は文字列キーを持っています。 – Sandeep

+0

'objLit ['room']'と 'objLit.room'は同じものです。プロパティが '.'に準拠していない場合は、Stringバージョンを使用する必要があります。構文は、プロパティ名にスペースがある場合と同様です。私の例を見てください。 – PHPglue

答えて

0

私はこれにChromeで試して与えた:

var objLit = {}; 

for(var i = 0; i < 500000000; i++){ 
    objLit['room'] = {}; 
    objLit['room'].name = "A", 
    objLit['room'].class = 10 
} 

console.log(objLit['room']); 

メモリが解放されていなかった場合、あなたがしながら、成長を維持するために、そのタブのメモリ使用量を期待しますループが走っていた。

これは当てはまりませんでした。繰り返し回数が50万回である場合に比べて、ループの繰り返し回数が500万回であれば、Chromeはメモリを消費しません。

つまり、ガベージコレクションは以前の値を取り除きます。
(Chromeでは、このような例では他のブラウザと同じように動作します)

関連する問題