的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 +='&nbsp;&nbsp;&nbsp;'; 
     } 
     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++),因为在使用循环时,我几乎从不打算让循环变量成为全局变量。我相信这是你的问题。

+0

您先生是一个传奇!感谢Adam :) –

+0

我(通常)以同样的方式声明我的循环索引,但请记住,JavaScript没有块范围,因此(在您的示例中)''我将可以访问包含'for'的其余函数的其余部分循环,而不只是在循环内。 – nnnnnn