js_深入函数_函数的内部属性arguments和this

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){}里面进行操作的。

猜你喜欢

转载自blog.csdn.net/HZPHYT/article/details/81156476
今日推荐