// 經典的寫法 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