JavaScript遞歸函數(shù)定義與用法實(shí)例分析
本文實(shí)例講述了JavaScript遞歸函數(shù)定義與用法。分享給大家供大家參考,具體如下:
遞歸函數(shù)是一個(gè)函數(shù)通過名字調(diào)用自身的情況下形成的,比如經(jīng)典的遞歸階乘函數(shù):
function factorial(num) { if (num <= 1) { return 1; } else { return num * factorial(num - 1); } }
上面的這種寫法,可能會(huì)造成問題:
var anotherFactorial = factorial; factorial = null; console.log(anotherFactorial(4));//出錯(cuò)
因?yàn)?factorial 函數(shù)定義內(nèi)部使用了自身的函數(shù)名,所以當(dāng) factorial 被置為 null 后,factorial 已不是函數(shù),自然報(bào)錯(cuò)啦 O(∩_∩)O~。
可以使用 arguments.callee 指向正在執(zhí)行的函數(shù)的指針來避免上面出現(xiàn)的問題:
function factorial(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); } } var anotherFactorial = factorial; factorial = null; console.log(anotherFactorial(4));
運(yùn)行結(jié)果:24
但在嚴(yán)格模式下,不能訪問 arguments.callee
,但可以使用命名函數(shù)表達(dá)式來實(shí)現(xiàn)上述功能:
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代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaScript 實(shí)現(xiàn)的checkbox經(jīng)典實(shí)例分享
本文主要給大家分享的是JavaScript實(shí)現(xiàn)checkbox多項(xiàng)選擇的經(jīng)典代碼,非常的簡單實(shí)用,有需要的小伙伴可以參考下2016-10-10如何在Web頁面上直接打開、編輯、創(chuàng)建Office文檔
如何在Web頁面上直接打開、編輯、創(chuàng)建Office文檔...2007-03-03每天一篇javascript學(xué)習(xí)小結(jié)(屬性定義方法)
這篇文章主要介紹了javascript中的屬性定義方法知識(shí)點(diǎn),對(duì)屬性定義方法的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11JavaScript判斷數(shù)組的方法總結(jié)與推薦
這篇文章主要給大家介紹了關(guān)于JavaScript判斷數(shù)組方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02