遍历对象会导致无限循环
Iterating over object results in 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
}
]
}
]
问题是你从不声明var i。因此,当您执行 (i=0;...) 变量 i 实际上附加到窗口时(您可以通过记录 window.i 轻松检查)。结果是你对所有循环使用相同的变量,问题是它每次都从 0 重新启动!
轻松修复 : for(var i = 0;...)
相关文章:
- 使用滚动溢出-x进行无限循环
- 从index.html调用函数,该函数无限循环
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- jQuery无限循环,动画化许多项目
- 循环对象时更新页面上的DIV元素
- 如何避免试图用php+jquery显示php起始页的无限循环
- 6502仿真增强型基本无限循环$C000至$E0ED
- Angular ngRoute导致无限循环和堆栈溢出
- Jquery:无限循环和暂停
- 数组数组:无限循环
- MeteorJS使用流星调用和流星方法时的无限循环
- 如何无限循环数据集字符串
- 遍历对象会导致无限循环
- 使用jQuery在具有相同名称函数的对象上触发事件时的无限循环
- 无限循环当观察父对象时,观察者不更新任何值
- AngularJS v1.2.x $digest() 无限循环指令隔离范围对象参数
- 没有无限循环地递归成对象