JavaScript遞歸函數定義與用法實例分析
本文實例講述了JavaScript遞歸函數定義與用法。分享給大家供大家參考,具體如下:
遞歸函數是一個函數通過名字調用自身的情況下形成的,比如經典的遞歸階乘函數:
function factorial(num) { if (num <= 1) { return 1; } else { return num * factorial(num - 1); } }
上面的這種寫法,可能會造成問題:
var anotherFactorial = factorial; factorial = null; console.log(anotherFactorial(4));//出錯
因為 factorial 函數定義內部使用了自身的函數名,所以當 factorial 被置為 null 后,factorial 已不是函數,自然報錯啦 O(∩_∩)O~。
可以使用 arguments.callee 指向正在執(zhí)行的函數的指針來避免上面出現的問題:
function factorial(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); } } var anotherFactorial = factorial; factorial = null; console.log(anotherFactorial(4));
運行結果:24
但在嚴格模式下,不能訪問 arguments.callee
,但可以使用命名函數表達式來實現上述功能:
var factorial = ( function f(num) { if (num <= 1) { return 1; } else { return num * f(num - 1); } } ); var anotherFactorial = factorial; factorial = null; console.log(anotherFactorial(4));
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數據結構與算法技巧總結》、《JavaScript數學運算用法總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。
相關文章
如何在Web頁面上直接打開、編輯、創(chuàng)建Office文檔
如何在Web頁面上直接打開、編輯、創(chuàng)建Office文檔...2007-03-03