function factorial(num){
if(num<=1){
return 1;
}
return num*arguments.callee(num-1);
}
var a=factorial;
factorial=null;
alert(a(5));
注意:(1).arguments.callee代表函数名,防止执行的函数与函数名紧紧耦合的现象,上述例子,factorial即使也空,函数也会调用新复制出来的函数进行调用(更灵活),不会调用原来的函数。arguments.callee常用与递归调用。
function add(){
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
alert(add(5,10,58));
function calculation(){
if(arguments.length==1){
return arguments[0]*arguments[0];
}else if(arguments.length==2){
return arguments[0]+arguments[1];
}
}
alert(calculation(5,18));
注意:(1).使用arguments.length可以获得传入实参的个数,arguments[i]可以获得传入的实参
(2).在js中,不存在重载,而使用arguments可以模拟重载,通俗的说,就是可以用在同个方法多处调用而传入参数不同。
var color="red";
function showColor(){
alert(this.color);
}
function Circle(color){
this.color=color;
this.showColor=showColor;
}
var c=new Circle("yellow");
c.showColor();
showColor();
注意:(1).this在调用会因为调用的对象不同而不同
(2).c.showColor调用的是window对象里面的c对象的里颜色,没写调用对象,就会调用window对象里面的color,因为所有的代码都是在with(window){}里面进行操作的。