JS中的遞歸函數


// 經典的寫法
    function test(n) {
        if (n <= 1) {
            return 1;
        } else {
            return  n * test(n-1);
        }
    }
    test(4) // 24

上面的寫法是沒有問題的 ,但是如果遇到函數表達式的寫法,可能會報錯,比如:

 function test(n) {
        if (n <= 1) {
            return 1;
        } else {
            return  n * test(n-1);
        }
    }
    var t = test;
    test = null;
    t(); // test is not a function

這就是函數調用函數的弊端,那怎么解決呢,用 arguments.callee 來解決,但是arguments.callee 這個方法被棄用了,所以我們用的時候,要注意使用場景和使用方法:

1.使用遞歸的時候,函數是聲明式的寫法(聲明式函數和表達式函數自行百度,或者看我另外一篇博客),避免出現 test is not a function 這種錯誤

2.參考文檔:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM