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次。
答案 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)
行为至少有三种可能性:
a
被覆盖(根据dystroys
回答)。buttonList
中的所有元素都没有draw
函数。this
的函数定义中的draw
是buttonList
中的元素。前两种可能性很容易解决,但第三种可能性取决于您的意图,即您希望实现的目标。要修复它,我们需要更多信息。
三种可能性中的任何一种(或可能性的组合)都可以解释这种行为。
第一种可能性由dystroy
解释。
如果元素没有draw
函数,第二种可能性将停止执行。在这种情况下,它似乎是第一个元素。
由于无限递归,第三种可能性将在堆栈溢出中呈现。 draw
函数被一遍又一遍地调用,只是记录到控制台2
然后2 0
,直到所有堆栈被消耗,执行停止。