迭代对象会导致无限循环

时间:2015-03-08 23:31:41

标签: javascript object recursion iterator infinite-loop

我有一个对象,我试图递归迭代,但陷入无限循环。我怀疑问题是我的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
            }
        ]
    }
]

1 个答案:

答案 0 :(得分:1)

问题是你永远不会声明var i。因此,当您执行(i = 0; ...)时,变量i实际上附加到窗口(您可以通过记录window.i轻松检查它)。 结果是你为所有循环使用相同的变量,问题是每次都重新启动0!

简易修复:for(var i = 0; ...)