-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

没有可以理解的原因。对我来说,这没有任何意义,因为这意味着函数的底部会执行两次,尽管没有什么可以强迫这种行为。我错过了什么吗?

任何关于我的问题的提示将不胜感激。

4

1 回答 1

1

作为neighbours一个全局函数,可能会在两个赋值之间执行函数的另一个调用neighbourstring = 'Before:'+neighbours.length+'\n';neighbourstring += 'After:'+neighbours.length+'\n';声明它var neighbours应该可以解决它。

于 2013-02-13T08:46:57.417 回答