【发布时间】:2013-01-17 09:00:41
【问题描述】:
以下代码有错误:
generate: function() {
var generated = [];
for (var j = 0; j < objectDefinitions.length; j++) {
var randomNumber;
if (!objectDefinitions[j].restrictGeneration) {
continue;
}
randomNumber = Math.random();
if (randomNumber < objectDefinitions[j].probability) {
generated.push(objectDefinitions[j].createObject());
objectDefinitions[j].restrictGeneration = true;
if (j > 5) {
}
setTimeout(function() {
//console.log(j);
objectDefinitions[j].restrictGeneration = false;
}, objectDefinitions[j].cooldown);
}
}
return generated;
}
当 setTimeout “触发”时,变量 j 为 6,这会导致数组索引超出范围异常,因为数组中只有 6 个项目。我真的不明白发生了什么,我在 setTimeout 之外检查了 j 并且它永远不是 6,但它似乎在声明之后发生了变化。感谢您的帮助。
【问题讨论】:
-
我想知道这个问题是否有更好的标题,因为这对于新手js程序员来说似乎是一个很好的学习机会,应该找到这个问题!
标签: javascript arrays object closures settimeout