javascript—方法调用两次的一部分

javascript—方法调用两次的一部分,javascript,methods,Javascript,Methods,我正在尝试用javascript编写一个自定义的、简单的高度映射生成。到目前为止,我已经记下了密码,但我经历了一些非常奇怪的事情,阻碍了我的前进。我不确定是虫子还是我瞎了眼。守则的一部分如下: function fillNeighboursHill(life) { //... life--; neighbours = this.getNeighbours(); neighbourstring = 'Before:'+neighbours.length+'\n';

我正在尝试用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);
}
函数fillshill(life){
//...
生命--;
neights=this.getneights();
neighbourstring='之前:'+Neighbors.length+'\n';
对于(变量i=0;i<0.length;i++){
//做点什么
邻居[i].希尔(生活);
}
neighbourstring+='之后:'+neighbours.length+'\n';
警报(邻居字符串);
}
这是一个递归调用自己几次的函数。但是,如果查看neighbourstring,您总是希望在该模式的末尾出现警报:

之前:8
之后:8

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

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

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


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

作为
邻居
一个全局变量,在
邻居之间可能会发生字符串='之前:'+neights.length+'\n'
neighbourstring+='之后:'+neighbours.length+'\n'正在两个赋值之间执行另一个函数调用。用
var
声明应该可以解决问题。

您应该尝试将问题减少到仍然存在问题的尽可能小的示例中。由于代码的复杂性,很难确定错误是什么。我不想对代码的一部分进行修改,因为它可能隐藏了一些对调试非常重要的有用信息。尽管如此,还是有人能够帮助我。顺便说一下,谢谢你的否决票,这有助于我作为第一张海报的进步。如果否决票不是你投的,那就忽略这个评论。不,否决票不是我投的。我想帮你改进你的问题。不要因此而气馁,StackOverflow是一个友好的地方。你应该试着阅读,但我不相信,就是这样。不过,这很有趣,因为邻居不是一个全局变量,因此应该只存在于函数的范围内。因此,奇怪的是,它似乎在大多数情况下都能按预期工作,但在8种情况中有1种情况下不能工作。感谢您的帮助。实际上,它是一个全局变量,除非您使用var声明它。您可以在
neights==this.getneights()之后检查
neights==window.neights
是否为真谢谢你向我澄清这一点。我曾经用不同的语言编程,希望变量的作用域与其他语言相同。这些知识对我很有帮助。