argument為函數內部對象,包含傳入函數的所有參數,arguments.callee代表函數名,多用於遞歸調用,防止函數執行與函數名緊緊耦合的現象,對於沒有函數名的匿名函數也非常起作用。舉例如下:
function factorial(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1); //arguments.callee代表factorial
}
}
var trueFactorial = factorial;
factorial = function(){
return 0;
}
alert(trueFactorial(5)); //結果為120,因為js中函數沒有重載,所以如果遞歸調用時使用函數名,則執行最后一個該函數名的函數,即返回0
alert(factorial(5));//結果為0
匿名函數的遞歸:
var num = (function(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
})(5);
alert(num); //結果為120
