我正在尝试在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
没有可理解的理由。对我来说,这没有任何意义,因为它意味着函数的底部执行了两次,尽管没有什么可以强迫这种行为。我错过了什么吗?
有关我的问题的任何提示都将受到高度赞赏。
答案 0 :(得分:1)
当neighbours
成为全局时,可能会发生在neighbourstring = 'Before:'+neighbours.length+'\n';
和neighbourstring += 'After:'+neighbours.length+'\n';
之间的另一个函数调用正在两个赋值之间执行。用var neighbours
声明它应该解决它。