方法的一部分调用了两次

part of method called twice

本文关键字:两次 一部分 调用 方法      更新时间:2023-09-26

我正在尝试用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);
}

这是一个递归调用自己几次的函数。不过,如果你查看neighborstring,你总是会期望在末尾出现以下模式的警报:

之前:8
之后:8

几乎所有情况都是这样,但有时我会得到

之前:8
之后:8
之后:8

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

任何关于我的问题的建议都将不胜感激。

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