【问题标题】:Iterating over object results in infinite loop迭代对象导致无限循环
【发布时间】:2015-03-08 23:31:41
【问题描述】:

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

【问题讨论】:

    标签: javascript object recursion iterator infinite-loop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2014-10-31
      • 2023-03-20
      • 1970-01-01
      • 2020-08-27
      相关资源
      最近更新 更多