在之前的文章中我們給大家介紹了關於JavaScript中遞歸函數的使用,那麼我們在使用JavaScript中的遞歸函數的時候,會出現一些問題,今天就給大家舉個例子來介紹下JavaScript中遞歸函數的問題!
先定義一個遞迴函數,求正整數N的階乘:
function factorial(num){ if(num<=1) return 1; return num*factorial(num-1); }
接著定義另外一個變數指向這個函數,然後將該函數置為null
var anotherFactorial=factorial; factorial=null; alert(anotherFactorial(4));//报错
為什麼會報錯呢?因為在函式factorial內部,遞歸呼叫了factorial本身,而上面的程式碼將factorial置為null了,所以它不再是一個function。這聽起來有點奇怪,不過javascript內部就是這樣處理的。怎麼解決這個問題呢?一個方法是用函數內部的arguments.callee取代函數本身
function factorial(num){ if(num<=1) return 1; return num * arguments.callee(num-1); }
這樣一來不管將函數賦值給哪個變量,之後的呼叫都不會有問題。因此,建議在遞歸函數內部用arguments.callee代替函數本身。或者也可以用函數表達式解決這個問題:
var factorial = (function f(num){ if(num<=1) return 1; return num*f(num-1); });
這樣不論是否將變數factorial變數賦值給另外的變量,遞迴呼叫都不會有問題。
總結:
透過本文的詳細介紹,相信小夥伴們對JavaScript中遞迴函數的問題有了新的了解,希望對你的工作有幫助!
相關推薦:
以上是JavaScript中遞迴函數的問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!