的Javascript:函数中调用函数和覆盖变量
问题描述:
我在JavaScript中有一个数组,可以去深,因为我想:的Javascript:函数中调用函数和覆盖变量
var steps = [
{ "step_id" : "1", "step_name" : "Step 1", "children" :
[
{ "step_id" : "4", "step_name" : "Step 4", "children" :
[
{ "step_id" : "6", "step_name" : "Step 6" }
]
},
{ "step_id" : "5", "step_name" : "Step 5" }
]
},
{ "step_id" : "2", "step_name" : "Step 2" },
{ "step_id" : "3", "step_name" : "Step 3" }
];
我再要显示的每个步骤中选择下拉框。对于每一个孩子的步骤,我想缩进它。这里是我的JS
function stepsChildren(children, count) {
var new_count = count + 1;
var selection_values_children = '';
for(j=0;j<children.length;j++) {
selection_values_children += '<option value="' + children[j].step_id + '">';
for(x=1;x<=count;x++) {
selection_values_children +=' ';
}
selection_values_children += children[j].step_name + '</option>';
if (typeof(children[j].children) != 'undefined')
selection_values_children += stepsChildren(children[j].children, new_count);
}
return selection_values_children;
}
var selection_values = '';
for(i=0;i<steps.length;i++) {
selection_values += '<option value="' + steps[i].step_id + '">' + steps[i].step_name + '</option>';
if (typeof(steps[i].children) != 'undefined')
selection_values += stepsChildren(steps[i].children, 1);
}
document.write('<select>' + selection_values + '</select>');
这几乎是在stepsChildren但是工作()功能Ĵ变量被改写我每次调用它。它几乎就像将全局变量设置为j一样。
我有道理吗?
如果不是我已经把样品给你看:http://jsfiddle.net/CJbnm/
如果您运行代码,看看右边的选择框,请注意第5步从阵列中丢失?
这是因为在步骤4中只有一个孩子,其更新Ĵ变量设置为1,而不是2父功能,并且不显示任何结果...
答
如果你不” t使用关键字var
创建变量,它将是全局变量,并且您将获得所描述的行为。在JavaScript中,我总是使用for
循环,比如for(var i=0;i<10;i++)
,因为在使用循环时,我几乎从不打算让循环变量成为全局变量。我相信这是你的问题。
您先生是一个传奇!感谢Adam :) –
我(通常)以同样的方式声明我的循环索引,但请记住,JavaScript没有块范围,因此(在您的示例中)''我将可以访问包含'for'的其余函数的其余部分循环,而不只是在循环内。 – nnnnnn