外环只发射一次

时间:2013-03-11 14:50:07

标签: php javascript loops

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

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

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

3 个答案:

答案 0 :(得分:13)

变量的范围是either the global scope or the function where it is declared,因此在此代码中只有一个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"); 
    };
};

答案 1 :(得分:2)

您正在使用相同的变量i。由于variable hoisting,这两个声明都变为一个。因此i每次传递时增加两次......

答案 2 :(得分:0)

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