0

我有什么(对我来说)看起来像一个非常基本的嵌套循环。除了外部循环仅在第一次触发:

var js_recipes = <?php echo json_encode($recipesArray); ?>;
console.log("there are " + js_recipes.length + " recipes"); //console confirms 2

for (var i = 0; i < js_recipes.length; i++) {
    console.log("adding recipe"); //only fires once
    js_recipe = js_recipes[i];

    //add each ingredient
    for (var i = 0; i < js_recipe.ingredients.length; i++) {
        console.log("adding ing"); //fires multiple times for first recipe
    };
};
console.log("looping complete");//fires ok

控制台输出为:

There are 2 recipes
adding recipe
adding ing
adding ing
adding ing
adding ing
looping complete

我一定遗漏了一些简单的东西,但为什么我只迭代第一个食谱?

4

3 回答 3

13

变量的范围要么是全局范围,要么是声明它的函数i,所以你在这段代码中只有一个,并且i由内循环和外循环递增。

对不同的循环使用不同的迭代器变量。

for (var i = 0; i < js_recipes.length; i++) {
    console.log("adding recipe");
    js_recipe = js_recipes[i];

    //add each ingredient
    for (var j = 0; j < js_recipe.ingredients.length; j++) {
        console.log("adding ing"); 
    };
};
于 2013-03-11T14:51:20.473 回答
2

您正在使用相同的变量i。由于变量提升,这两个声明成为一个。因此i,每次通过时 get 增加两次...

于 2013-03-11T14:51:42.603 回答
0

如果存在函数变量范围问题,可以尝试将内部 for 循环设置为与 i 不同的变量,例如 j。

于 2013-03-11T14:54:14.717 回答