本文實(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); }}上面的這種寫法,可能會造成問題:
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));
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答