2010-08-15 223 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

這是因爲你的迭代變量的範圍「我」,如果你聲明它作爲局部變量該方法將正常工作。例如:

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]。這導致無限循環。