不循环遍历数组中的所有项目

时间:2013-05-30 18:18:07

标签: javascript arrays for-loop

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次。

2 个答案:

答案 0 :(得分: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 :(得分:0)

行为至少有三种可能性:

  1. a被覆盖(根据dystroys回答)。
  2. buttonList中的所有元素都没有draw函数。
  3. this的函数定义中的
  4. drawbuttonList中的元素。
  5. 前两种可能性很容易解决,但第三种可能性取决于您的意图,即您希望实现的目标。要修复它,我们需要更多信息。

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

    第一种可能性由dystroy解释。

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

    由于无限递归,第三种可能性将在堆栈溢出中呈现。 draw函数被一遍又一遍地调用,只是记录到控制台2然后2 0,直到所有堆栈被消耗,执行停止。