遞歸函數是在一個函數通過名字調用自身的情況下構成的。如下:
function self(num){
if(num<=1){
return 1;
}
else{
return num*self(num-1);
}
}
這是一個經典的求階乘的函數。當在外面調用self(4)是可以得到24 ,但是在下面這種情況下就會出錯:
var another=self;
self=null;
alert(anthor(4));//error
因為将self付給another之後,self變為空,當調用another時還要必須運作self,是以出錯。我們可以通過arguments.callee解決這個問題。
arguments.callee是一個指向正在執行的函數的指針。是以可以改為如下:
function self(num){
return num*arguments.callee(num-1);