arguments主要的用途是保存參數,它有個屬性cell的屬性,該屬性是一個指針,指向擁有arguments的對象的函數。函數
通常狀況下,使用遞歸時直接調用函數的名稱,實現遞歸其實現的調用自身函數。
例子以下:階乘spa
function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - 1); } } var fn = factorial; factorial = function(){return 0;} alert(fn(5));//結果是0 alert(factorial(5));//結果0
爲何要使用arguments.callee代替函數名,爲了解除這種執行函數與函數名factorial耦合在一塊兒,指針
因此使用了arguments.callee,不管在後期引用函數時使用什麼名字,均可以保證完成遞歸。code
function factorial(num){ if(num <= 1){ return 1; }else{ return num * arguments.callee(num - 1); } } var fn =factorial; factorial = function(){return 0;} alert(fn(5));//120 alert(factorial(5));//0