我有一个对象,我试图递归迭代,但陷入无限循环。我怀疑问题是我的for循环中的变量i
没有增加,但为什么呢?
我的代码:
var failsafe = 0;
function iter(obj) {
for (i = 0; i < obj.length; i++) {
console.log("Now #"+i);
if (typeof obj[i].contains == "object") {
console.log(obj[i].command);
iter(obj[i].contains);
} else {
console.log(obj[i].command);
}
if (failsafe==20) return false;
failsafe++;
}
}
iter(parsed);
控制台输入:
Now #0
do (5)
Now #0
move.up()
Now #1
move.left()
Now #2
if (check.up() == "item")
Now #0
move.down()
Now #2
if (check.up() == "item")
Now #0
move.down()
Now #2
if (check.up() == "item")
Now #0
move.down()
... and so on
对象:
[
{
"command":"do (5)",
"contains":[
{
"command":"move.up()",
"contains":false
},
{
"command":"move.left()",
"contains":false
},
{
"command":"if (kind == \"item\")",
"contains":[
{
"command":"move.down()",
"contains":false
}
]
},
{
"command":"move.right()",
"contains":false
}
]
}
]
答案 0 :(得分:1)
问题是你永远不会声明var i。因此,当您执行(i = 0; ...)时,变量i实际上附加到窗口(您可以通过记录window.i轻松检查它)。 结果是你为所有循环使用相同的变量,问题是每次都重新启动0!
简易修复:for(var i = 0; ...)