次の JavaScript コードはメモリ リークを起こしているようですが、その理由はわかりません。Chrome 19 と firefox 12 でこれを試しました。コードは以下のとおりです。
<body>
<input id="add" type="button" value="add" onclick="add()" />
<input id="remove" type="button" value="remove" onclick="remove()" />
<div id="content">
</div>
</body>
<script>
var count = 0;
function add() {
var i = 0,
newdiv;
for (i = 0; i < 10000; i++) {
newdiv = document.createElement('div');
document.getElementById("content").appendChild(newdiv);
newdiv.setAttribute('id', "div" + count);
newdiv.innerHTML = "section " + count;
newdiv = null;
count = count + 1;
}
}
function remove() {
var i = 0;
for (i = 0; i < count; i++) {
document.getElementById("content").removeChild(document.getElementById("div" + i));
}
count = 0;
}
</script>
追加ボタンをクリックしてから削除ボタンをクリックし続けると、 Windows タスク マネージャーのメモリが増加し続けます。ガベージ コレクションが開始されると、ある時点でメモリが減少することを期待していましたが、これは決して起こらないようです。
それで、私の質問は次のとおりです。このコードにメモリリークはありますか? もしそうなら、どうすればコードをリファクタリングしてリークを修正できますか?