JavaScript For Loop Breaking Early

时间:2017-09-04 20:21:48

标签: javascript jquery for-loop firebase

为什么for循环会在JavaScript中提前终止?由于某种原因,我的外部for循环在第一次重复后终止。我是JavaScript新手,但我希望这样的东西可以在Java中运行。

function check(){
    var elements = document.getElementById('fields').children;
    var filteredMolecules = molecules;
    console.log(elements.length);
    for (i = 0; i < elements.length; i++) { 
        console.log(elements[i].id)
        filterMolecules(filteredMolecules, elements[i].id, 0, 10);
    }
}

function filterMolecules(molecules, parameter, lower, upper){
    console.log('filtering');
    var filteredMolecules = [];
    for (i=0;i<molecules.length;i++){
        var value = molecules[i].val()[parameter];
        filteredMolecules.push(molecules[i]);
    }
    molecules=filteredMolecules;
}

在check()中,我遍历包含22个项目的元素,如第一个console.log(elements.length)所示。如果我删除方法filterMolecules(...),则会记录所有22个ID。但是,使用代码,只记录第一个id。

我认为应该运行elements.length次数的filterMolecules方法导致外部for循环不起作用。有人可以解释为什么会发生这种情况。如果相关,则在filterMolecules(...)中使用molec [i] .val()[parameter]从Google Firebase检索数据。另外,两种方法都使用全局变量分子(第3行和第14行)

1 个答案:

答案 0 :(得分:2)

如果你没有在javascript中声明变量,你最终会使用全局变量(这可能很难发现bug的来源)。因此,您在这两个循环中使用相同的全局变量http://localhost:8000/services [{"name":"/loadtestservice","url":"http://0.0.0.0:51796"},{"name":"kafka_native","url":"tcp://localhost:9092/kafka_native"},{"name":"friendservice","url":"http://0.0.0.0:60399"},{"name":"chirper-front-end","url":"http://0.0.0.0:57143"},{"name":"chirpservice","url":"http://0.0.0.0:54485"},{"name":"activityservice","url":"http://0.0.0.0:51855"},{"name":"cas_native","url":"tcp://127.0.0.1:4000/cas_native"}] 。当您开始循环思考i时,您意外地增加了第一个molecules的计数器循环。使用不同的变量定义它们:

for

这将为每个循环提供自己的 for (let i=0;i<molecules.length;i++) 版本。

在这种情况下,由于声明在单个函数内部,因此您也可以使用i

var