Java脚本递归地添加子节点以无限循环结束
Java Script recursivly adding a child ends in infinite loop
这是我添加子元素的函数。对于flag,它只会添加子节点一次。如果没有标志,它就会进入无限循环。标志是全局的
function addChildToParent(node, parent, child) {
if (node.name == parent) {
node.add(child);
flag = true;
}
else if (flag==false){
for (i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
}
}
在这里被调用,smth的长度是3
request.onload = function () {
var ecs=[];
for(i=0;i<smth.length;i++){
ecs[i]= new Node(smth[i],EC);
flag=false;
addChildToParent(node,smth[i],ecs[i]);
}
};
上面的函数被调用了2次。问题是我做错了什么
您应该将else if
替换为else
,或者在else if
条件中添加另一个条件,如下所示
function addChildToParent(node, parent, child) {
if (node.name == parent && flag !==false) {
node.add(child);
flag = true;
}
else if (node.name !== parent && flag == false){
for (i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
}
}
感谢我的帖子的zer00ne评论,我已经确定了问题。for
中的i
变量必须与var i
一起使用,否则它会被覆盖,因为它不是局部变量,而是全局变量。
for (var i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
修复问题
相关文章:
- 循环结束/推送到数组之前在页面上呈现EJS
- 使用滚动溢出-x进行无限循环
- 从index.html调用函数,该函数无限循环
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- jQuery无限循环,动画化许多项目
- 如何避免试图用php+jquery显示php起始页的无限循环
- 6502仿真增强型基本无限循环$C000至$E0ED
- Angular ngRoute导致无限循环和堆栈溢出
- Jquery:无限循环和暂停
- 数组数组:无限循环
- MeteorJS使用流星调用和流星方法时的无限循环
- 如何无限循环数据集字符串
- jquery在无限循环中运行
- 遍历对象会导致无限循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- Java脚本递归地添加子节点以无限循环结束
- 是否有任何解决方案来结束一个无限循环函数