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