js arguments的特性

arguments

在js中函数的参数天生不定参,形参可以比实参多,实参也可以比形参多并且不报错,因为在每个函数中都有一个arguments,叫做实参列表,它是一个类似于数组的对象,它会按照实参的顺序保存着所有传递给函数的实参。也就是说它会接收完所有的实参。
没有传递值的形参,值默认为undefined。

// num2的值是undefined
//形参就相当于在函数中隐式的声明了两个变量var num1,num2
function fn(num1,num2){
	//arguments接收完所有的实参
	//此处打印1 arguments[0]代表着第一个实参
	console.log(arguments[0]);	
}
//这么做不报错
//实参
fn(1); 

arguments的作用:
我想求任意个数的和该怎么办? 也就是说传递的值的个数是不固定,所以说你定义的形参是不固定的,使用arguments就可以解决这个问题,你不需要定义形参来接收实参,arguments里面就保存了所有的实参,因此我们只要把arguments里的每一项取出来相加就行了。
arguments有一个属性lenght表示arguments的长度。

function sum(){
	for(var i = 0, res = 0; i < arguments.length ;i++){
		res += arguments[i];
	}
	console.log(res);
}
//实参的个数不固定
sum(1,2,3,4,5,6,7,8,9,10); //55
sum(1,2,3) //6

实参和形参相映射:
意思是arguments的值永远和形参保持同步并且它们不是同一个内存空间,形参的值发生变化对应的arguments的某一项的值也跟着变化,同理,aguments的某一项值发生变化对应的形参也会跟着变化,前提是arguments实参列表和形参数相对应。

function test(num1,num2){
	num1 = 2
	/*
		arguments[0]也变成2了
		arguments[0]和num1保持着映射关系
		num1是第一个形参被修改对应的第一个实参arguments[0]也跟着变化
		num1的改变会反映到arguments[0]身上
		但是arguments[0]和num1并不是同一个内存空间
		但是它们的值就是会保持同步
	*/
	console.log(arguments[0]); //2
}
test(1,2)

还有一个种情况就是arguments实参列表的数量和形参的数量没有对应上则不会发生映射关系,原因是arguments有多少项是根据你传过来的实参有多少。换句话说你都没有第二个实参你怎么和第二个形参相去映射。

function test(num1,num2){
	num2 = 4;
	/*
		由于实参只有一个,而形参有二个,
		因此num2和arguments[1]不会发生映射关系。
		换句话说都没有arguments[1]这一项,怎么和num2映射呢
		因此打印arguments[1]是undefined
	*/
	console.log(arguments[1]); //undefined
}
test(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值