arguments.cell的問題

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
相關文章
相關標籤/搜索