2010-08-15 3 views
2

Я пытаюсь написать рекурсивный метод, который может принимать в качестве входного сигнала array/value, а затем обрабатывать ввод.Проблема с JavaScript Рекурсия

<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> 

Когда я пытаюсь запустить эту программу, кажется, что она идет к бесконечному циклу. Почему это?

ответ

13

Именно из-за этого объема вашей переменной итерации «i», если вы объявите ее как локальную переменную, метод будет работать нормально. ex:

for(var i=0; i < array.length; i++) 

Если вы создаете переменную без ключевого слова "var", область действия переменной будет глобальной (окно).

В вашем случае, когда процесс вызова ([4,1]), значение переменной i равно 3, тогда во время вызова значение переменной «i» находится в положении «0», а затем увеличивается на « 1 "и" 2 ", то обработка значения [4,1] завершена, и управление возвращается вызывающему абоненту. Но так как переменная «i» имеет глобальную область действия, значение «i» изменяется на «2» вместо «3», поэтому это приводит к тому, что основной цикл снова обрабатывает значение [4,1]. Это приводит к бесконечному циклу.

Смежные вопросы