私は単純な Tic Tac Toe ゲームに取り組んでいます。ここでは、競技場を表し、DOM の知識がなくても競技ロジックを含む明らかにするモジュールがあります。
var gameBoard = function() {
var createBackingArray = function(size) {
var f = new Array(size);
for (var i = 0; i < size; i++) {
f[i] = new Array(size);
}
return f;
};
var field = createBackingArray(3);
var getField = function(){
//Return a copy of the array to prevent the field
//from being manipulated from firebug, etc.
return field.slice(0);
}
var isFreeToPlay = function(x, y) { //stuff };
var playField = function(x, y, player) { //stuff };
return {
getField: getField,
isFreeToPlay: isFreeToPlay,
playField: playField
};
}();
そして別のスクリプトでは、DOM関連のものをすべて持っています。
var createDomField = function(fieldData) {
var table = $("<table/>");
var length = fieldData.length;
for (var row = 0; row < length; row++) {
var newRow = $("<tr>");
for (var cell = 0; cell < length; cell++) {
var newCell = $("<td>");
newCell.html(fieldData[row][cell]);
newRow.append(newCell);
}
table.append(newRow);
}
return table;
};
var updateField = function(){
var field = createDomField(gameBoard.getField());
elem.fieldContainer.empty();
elem.fieldContainer.append(field)
}
上記のように配列のコピーを作成する場合、フィールドを更新/再描画するたびにメモリ リークが発生するか (たとえば、updateField を何億回も呼び出すと)、関数が完了して DOM が更新されましたか?
GC されていない場合、何らかの方法で手動でクリーンアップする方法はありますか?
これはこれを行う悪い/醜い方法ですか? 配列の状態を公開し、クロージャーで「プライベート」にして、開発ツール/firebugで操作できないようにするより良い方法はありますか?