當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript递归函数问题
生活随笔
收集整理的這篇文章主要介紹了
javascript递归函数问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在看《Professional Javascript For Web Developers 3rd Edition》,看到關于遞歸函數調用的問題,在此記錄備忘:
先定義一個遞歸函數,求正整數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變量賦值給另外的變量,遞歸調用都不會有問題。
轉載于:https://www.cnblogs.com/lzkwin/archive/2013/03/10/javascript.html
總結
以上是生活随笔為你收集整理的javascript递归函数问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统需求分析文档需要考虑的问题
- 下一篇: JSP2.0中Simple Tag介绍