JS For 循环在调用函数后提前停止

问题描述 投票:0回答:2

我有一个 Javascript 数组,用于保存页面的内容。为了在页面加载时在正确的位置绘制所有对象,我循环遍历数组并拉出元素。这种方法非常有效,直到我允许这些对象在其中拥有子对象。

当前的数组结构是

0-> {elements=[] frame={I keep the frame attributes here with key value pairs}}, 1-> {elements=[] frame={}}

但是,我刚刚开始向每个对象中的元素数组添加子元素。所以现在我必须循环/绘制每个元素,检查是否有任何子元素,如果有,那么我也必须绘制它们。

我遇到的问题是,在循环第一个 0 对象及其子对象后,for 循环停止运行。是因为我多次调用同一个函数吗?我以前也这样做过,所以我不认为这是正在发生的事情。

this.run_loop = function (spawn, dom) {
    console.log(spawn)
    alert(spawn.length)
    for (i = 0; i < spawn.length; i++) {
        console.log(spawn[i])
        //alert("i one")    
        var newdom = dom + "_" + i;
        this.synthesize_elements(spawn[i], dom, newdom)
        if (spawn[i].hasOwnProperty('elements')) {
            //alert("FOUND")
            var newarray = spawn[i]['elements'];
            if (newarray.length > 0) {
                this.run_loop(newarray, newdom)
            }
        }
    }
}
javascript jquery
2个回答
3
投票

这有点老了,但我遇到了类似的问题,并在这里找到了方法,但我想通了,并认为如果其他人遇到这个问题,我会发布解决方案。我的例子中的问题(看起来也像你的例子,尽管我不能确定)是在 for 循环的声明中:

for (i = 0; i < spawn.length; i++)

你并没有声明 i 是一个新变量。所以如果

里面有任何东西
this.run_loop(newarray, newdom)

function 还操作一个名为 i 的计数器变量,该变量未声明为新的 var,它还会更改外部作用域中的变量,如果它超过了 spawn 的长度,则将你踢出循环

始终声明:

for (var i; i< spawn.length; i++)

在你的循环中或确保你的计数器是唯一的。


0
投票

谢谢 bryan60,当我的循环在调用函数后第一次迭代时停止时,这让我有点困惑,我不知道为什么。

设置var i = 0;而不是 i = 0 解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.