我有什么(对我来说)看起来像一个非常基本的嵌套循环。除了外循环只是第一次触发:
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
我必须遗漏一些简单的东西,但为什么我只是迭代第一个食谱?
答案 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。