0

私は単純な 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で操作できないようにするより良い方法はありますか?

4

1 に答える 1

0

1 つのアイデアはcreateBackingArray公開することであり、代わりgetFieldpopulateField. で作成した配列の独自のインスタンスを再利用し、updateFieldでデータを再フェッチするだけです。createBackingArraypopulateField

例を次に示します: http://pastie.org/8266775

于 2013-08-24T20:06:14.947 に答える