JavaScript递归问题

JavaScript递归问题,javascript,Javascript,我正在尝试编写一个递归方法,它可以将数组/值作为输入,然后处理输入 <html> <body> <script> function process(array){ if (array instanceof Array) { for(i=0; i < array.length; i++){ process(array[i]); } } e

我正在尝试编写一个递归方法,它可以将
数组/值
作为输入,然后处理输入

<html>
  <body>
    <script>
      function process(array){
        if (array instanceof Array) {
          for(i=0; i < array.length; i++){
            process(array[i]);
          }
        } else {
          document.write(array + "<br />");
        }
      }

      process([3, 4, 5, [4,1], [5,1,2],[6,1]]);
    </script>
  </body>
</html>

函数进程(数组){
if(数组的数组实例){
对于(i=0;i”);
}
}
过程([3,4,5,4,1],[5,1,2],[6,1]);

当我试着运行这个程序时,它似乎进入了一个无限循环。为什么

这是因为迭代变量“i”的作用域,如果将其声明为局部变量,则该方法可以正常工作。例:

for(var i=0; i < array.length; i++)
for(变量i=0;i
如果您创建的变量没有“var”关键字,那么变量的作用域将是全局的(窗口)

在您的例子中,当调用过程([4,1])发生时,变量i的值为3,则在调用过程中,变量“i”的值被保留为“0”,然后递增为“1”和“2”,然后值[4,1]的处理完成,并将控制权交还给调用方。但是,由于变量“i”是全局范围的,“i”的值被修改为“2”,而不是“3”,因此这会导致主循环再次处理值[4,1]。这将导致无限循环