JavaScript递归问题

Aru*_*hny 2 javascript

我正在尝试编写一个递归方法,它可以array/value作为输入然后处理输入.

<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>
Run Code Online (Sandbox Code Playgroud)

当我尝试运行这个程序时,它看起来像是一个无限循环.为什么?

Aru*_*hny 13

这是因为你的迭代变量"i"的范围,如果你将它声明为局部变量,该方法将正常工作.例如:

for(var i=0; i < array.length; i++)
Run Code Online (Sandbox Code Playgroud)

如果创建不带"var"关键字的变量,则变量的范围将为全局(窗口).

在您调用进程([4,1])的情况下,变量i的值为3,然后在调用期间,变量"i"的值被设置为"0",然后增加到"1"和" 2"然后完成值[4,1]的处理,并将控制权交还给呼叫者.但由于变量"i"具有全局范围,因此"i"的值被修改为"2"而不是"3",因此这会导致主循环再次处理值[4,1].这导致无限循环.