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语句运行它时,它会在控制台上记录:

2
2 0

这似乎告诉我,我的 for 循环并没有遍历数组中的每个项目,而且我一直在摸索为什么这会持续很长时间。有谁知道为什么它只执行 a = 0 的动作?

编辑:我不知道这是否有区别,但是这个函数每秒被调用大约 60 次。

4

2 回答 2

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。您应该小心变量声明。

于 2013-05-30T18:20:11.213 回答
0

这种行为至少有三种可能性:

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

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

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

第一种可能性由 解释dystroy

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

第三种可能会由于无限递归而导致堆栈溢出。该draw函数被一遍又一遍地调用,只是登录到控制台,2然后2 0直到所有堆栈都被消耗完,此时执行停止。

于 2013-05-30T20:29:48.003 回答