-1

カスタムの単純な高さマップ生成を JavaScript で記述しようとしています。これまでのところ、コードを書き留めましたが、道を塞いでいる非常に奇妙な何かが発生しました。それがバグなのか、それとも私が盲目なのかはわかりません。コードの一部は次のとおりです。

function fillNeighboursHill(life) {
    //...
    life--;
    neighbours = this.getNeighbours();
    neighbourstring = 'Before:'+neighbours.length+'\n';
    for (var i=0; i < neighbours.length; i++) {
        //do something
        neighbours[i].fillNeighboursHill(life);
    }
    neighbourstring += 'After:'+neighbours.length+'\n';
    alert(neighbourstring);
}

これは、自分自身を数回再帰的に呼び出す関数です。ただし、neighbourstring を見ると、このパターンの最後に常にアラートが表示されることが予想されます。

変更前:8 変更
後:8

これはほとんどすべての場合に当てはまりますが、時々私は得るでしょう

変更前:8 変更
後:8 変更
後:8

理解できない理由で。私にとっては、関数の下部が 2 回実行されることを意味するため、意味がありませんが、そのような動作を強制するものは何もありません。何か不足していますか?

私の問題に関するヒントをいただければ幸いです。

4

1 に答える 1

1

グローバルneighboursであるため、関数の別の呼び出しが 2 つの代入の間で実行されることがありますneighbourstring = 'Before:'+neighbours.length+'\n';neighbourstring += 'After:'+neighbours.length+'\n';で宣言するとvar neighbours解決するはずです。

于 2013-02-13T08:46:57.417 に答える