在我們之前的一篇文章中,我們給大家解析了一下JavaScript中的遞歸函數,相信對此有所了解,那麼家JavaScript中的遞歸函數如何使用呢?今天就帶大家詳細的介紹下JavaScript中遞迴函數的使用!
所謂的遞歸函數就是在函數體內呼叫本函數。使用遞歸函數一定要注意,處理不當就會進入死循環。遞歸函數只有在特定的情況下使用,例如階乘問題
下面我們就做一個10以內的階乘試試看:
[Ctrl+A 全選注:如需引入外部Js需刷新才能執行]
遞歸函數的呼叫就說這麼多了
js遞歸函數呼叫自身時的保險方式。
來自js高階程式設計
一個典型階乘遞歸函數:
程式碼如下:
function fact(num){ if (num<=1){ return 1; }else{ return num*fact(num-1); } }
以下程式碼可導致出錯:
var anotherFact = fact; fact = null; alert(antherFact(4)); //出错
#由於fact已經不是函數了,所以出錯。
用arguments.callee可解決問題,這是一個指向正在執行的函數的指標。
新的函數為:
程式碼如下:
function fact(num){ if (num<=1){ return 1; }else{ return num*arguments.callee(num-1); //此处更改了。 } } var anotherFact = fact; fact = null; alert(antherFact(4)); //结果为24.
#JS普通遞迴的改進
遞迴函數是在一個函數透過名字呼叫自身的情況下構成的,如下所示:
程式碼如下:
function factorial(num) { if(num<=1) { return 1; } else { return num * factorial(num-1); } }
這是一個經典的階乘函數。表面看來沒有什麼問題,但下面的程式碼可能導致它出錯。
var anotherFactorial = factorial; anotherFactorial(4); //输出 24 factorial = null;
anotherFactorial (4); //TypeError: Property 'factorial' of object [object Window] is not a function chrome 下測試
# 原因在於,我們定義的函數名,其實是指向函數的一個指針,此時定義了anotherFactorial 也指向了那個函數,所以調用anotherFactorial (4)可以成功的輸出24
此時factorial = null; 那麼執行定義函數的參考就剩下了anotherFactorial,那麼在呼叫anotherFactorial(4)就會顯示以上的錯誤的資訊。
此時可以使用arguments.callee來取代函數定義中的factorial,
函數的定義就變成了:
程式碼如下:
function factorial(num) { if(num<=1) { return 1; } else { return num * arguments.callee(num-1); } }
那麼在使用上面的4行測試程式碼,最後一行測試程式碼也可以成功的輸出24.
#總結:
透過上述文章的詳細介紹,相信小夥伴們對JavaScript中遞歸函數的使用有了進一步的了解,希望對你的工作有幫助!
相關推薦:
# #以上是JavaScript中遞迴函數的使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!