首頁  >  文章  >  web前端  >  JavaScript中遞迴函數的問題解決

JavaScript中遞迴函數的問題解決

黄舟
黄舟原創
2017-11-18 11:28:481415瀏覽

在之前的文章中我們給大家介紹了關於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中遞迴函數的使用詳解


JavaScript中遞迴函數的解析與說明


##JavaScript中遞歸函數的細化認識以及範例程式碼分享#

以上是JavaScript中遞迴函數的問題解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn