遞歸函數是在一個函數經過名字調用自身的狀況下構成的函數
function f(num) { if (num <= 1) { return 1; } else { return num * f(num - 1) } } f(3) // 6 var anotherFactorial = f; f = null; //f指向一個空指針 alert(anotherFactorial(4)); //出錯!
arguments.callee 是一個指向正在執行的函數的指針,所以能夠用它來實現對函數的遞歸調用指針
function f(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num-1) } } f(3) // 6 var anotherFactorial = f; f = null; //f指向一個空指針 alert(anotherFactorial(4)); //24
但在嚴格模式下,不能經過腳本訪問 arguments.callee ,訪問這個屬性會致使錯誤。不過,可使用命名函數表達式來達成相同的結果code
var factorial = (function f (num) { if (num <= 1){ return 1; } else { return num * f(num-1); } }); factorial(4) //24
這種方式在嚴格模式和非嚴格模式下都行得通遞歸