JavaScrip函数笔记:(3)使用参数(JavaScript)

定义参数

函数参数包括两种类型:形参和实参。行参就是函数声明的参数变量,它仅在函数内部可见,而实参就是实际传递的参数值。

function f(a,b){
	return a+b;
}
var x=1,y=3;	//定义实参
alert(f(x,y));	//调用函数并传递实参

JavaScript可以包含零个或者多个实参。函数定义时的形参可以通过length属性来获取形参个数。

alert(f.length);

一般情况下,形参个数和实参格式应该相同。但特殊情况下,可以不相同。

(function(a,b){
	alter(typeof a);	//返回number
	alter(typeof b);	//	返回undefined
})(2);	//调用函数,传递一个实参

如果实参多于形参,多余的实参会被忽略。
形参与函数体内使用var语句声明的变量都属于局部变量,仅在函数体内可见。当私有变量与形参发生冲突时,则私有变量拥有较大的优先权。

function f(a){
	var a=3;
	return a;
}
alter(f(8));	//返回3
使用arguments

arguments对象表示参数集合化,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础Array的原型方法。

function f(){
	for(var i=0;i<arguments.length;i++){
	alert(arguments[i]);
	}
}
f(4,6,7);	//返回4,6,7

使用arguments对象可以随时编辑实参值。

function f(){
	for(var i=0;i<arguments.length;i++){
	arguments[i]=i;
	alert(arguments[i]);
	}
}
f(4,6,7);	//返回0,1,2

如果arguments的length属性值变小,则会丢弃arguments数据集合后面对应的个数的元素。

function f(){
				arguments.length=2;
				for(var i=0;i<arguments.length;i++){
				alert(arguments[i]);
				}
			}
			f(4,6,7);	//返回4,6
使用callee回调函数

arguments对象包含一个callee属性,它引用当前arguments对象所属的函数,使用该属性可以在函数体调用函数自身。在匿名函数中,callee属性比较有用,利用它来设计函数迭代操作。

举个例子:使用arguments.callee获取匿名函数,然后通过函数的length属性获取函数形参个数,最后比较实参与形参个数以检测用户穿戴的参数是否符合要求。

function f(x,y,z){
				var a=arguments.length;		//获取函数实参个数
				var b=arguments.callee.length;	//获取函数形参个数
				if(a!=b){
					throw new Error("传递的参数不匹配!");
				}else{
					return x+y+z;
				}
			}
			alert(f(4,6,7));	//返回值17

Function对象的length属性返回的是函数形参个数;而arguments返回的则是函数实参个数。
如果不是匿名函数,则arguments.callee等于函数名。

function f(x,y,z){
				var a=arguments.length;
				var b=f.length;
				if(a!=b){
					throw new Error("传递的参数不匹配!");
				}else{
					return x+y+z;
				}
			}
			alert(f(4,6,7));	//返回值17
应用arguments对象

灵活使用arguments对象,可以提升使用函数的灵活性,增强函数在抽象编程中的适应能力和纠错功能。
举个例子:定义一个求平均值的函数。

function avg(){
				var num=0,k=0;	//num总数,k个数
				for(var i=0;i<arguments.length;i++){	//遍历所有实参
					if(typeof arguments[i]!="number")	//如果不是数值,则忽略
						continue;
					num+=arguments[i];
					k++;
				}
				num/=k;
				return num;
			}
		alert(avg(4,6,7,8,3,2));	//返回5

验证函数参数的合法性。

举个例子:通过使用arguments来模拟重载,其实现机制是通过判断arguments中实际参数和类型来执行不同的逻辑。

function f(){
			switch(arguments.length){
				case 0:
				return "vv";
				case 1:
				return "vv"+arguments[0];
				case 2:
				return "vv"+arguments[1];
				case 3:
				return "vv"+arguments[2];
			};
		}
		alert(f());
		alert(f("ft"));

callee是arguments对象的一个属性,其值是当前正在执行的function对象,它的作用是使匿名function可以被递归调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值