2013-05-30 137 views
1
this.draw = function() { 
    console.log(this.buttonList.length); 
    for(a = 0; a < this.buttonList.length; a++) { 
     console.log(this.buttonList.length, a); 
     this.buttonList[a].draw(); 
    } 
}; 

所以我在一个对象中有这个函数,而且它没有像我期望的那样工作。当我和上面的console.log语句运行它,它会记录这个在控制台上:没有循环遍历数组中的所有项目

​​

这似乎在告诉我,我的for循环不通过阵列上的每个项目的循环,我一直在抓我请回顾一下为什么现在会有相当长的一段时间。有谁知道为什么它只执行a = 0的动作?

编辑:我不知道这是否有所作为,但这个功能被称为每秒约60次。

+2

也许是因为'button'对象没有一个名为'draw'的函数并在那里停止执行。 –

+1

我看到a是一个全局变量。它可能重新设置在其他地方。 – Stasik

+0

@SaniHuttunen由于OP显然看着控制台,他会注意到它。 –

回答

6

添加var可能会解决这个问题:

this.draw = function() { 
    console.log(this.buttonList.length); 
    for(var a = 0; a < this.buttonList.length; a++) { 
     console.log(this.buttonList.length, a); 
     this.buttonList[a].draw(); 
    } 
}; 

,你改变a有很有可能你的代码的另一点。你应该小心变量声明。

+1

该死的,我太慢了;( – Stasik

0

有对行为ATLEAST三种可能性:

  1. a被覆盖(根据dystroys答案)。
  2. buttonList中的所有元素都没有draw函数。
  3. thisdraw的函数定义中是buttonList中的元素。

前两种可能性很容易解决,但第三种可能性取决于你的意图是什么,即你想完成什么。为了修复它,我们需要更多的信息。

三种可能性(或可能性的组合)中的任何一种都可以解释这种行为。

第一种可能性由dystroy解释。

如果元素没有draw函数,则第二种可能性将停止执行。在这种情况下,它似乎是第一个元素。

由于无限递归,第三种可能性会导致堆栈溢出。一次又一次地调用draw函数,只需要记录到控制台2,然后2 0,直到所有堆栈在执行停止的位置消耗完。

+0

Voi kiitos huolellisesta vastauksestasi!在我解决问题后,一个新的问题出现了,它冻结了,可能性#3可能帮助我找出问题所在。Kummallista,ettäitseasiassa tunnen jotakuta SaMi Huttusta。ö! –

+0

Olehyvä!;)请更新您的问题,甚至更好地提出一个新问题,详细解释您的新问题。 –