函数的参数问题
在之前的文章中我们介绍过函数参数分为实际参数和形式参数,实际参数是在函数调用时括号内的参数,形式参数是在声明函数时括号内的参数。
一般情况下函数的实际参数与形式参数之间不论是个数还是函数传入参数的数据类型,都应该严格的一一对应。但是实际上为了函数的健壮性(不会因为用户乱传参数导致程序崩溃),往往很多函数都会出现实际参数与形式参数不对应的情况,即使如此程序依旧能够输出结果,并且不会造成程序崩溃。例如:
<script>
console.log('你好');//能够输出一句你好
console.log('你好','javascript')//能够输出两句话,‘你好 javascript’
</script>
可以很明显的看出来console.log()函数的参数,对实际参数个数和参数类型是没有限制的,这是怎么做到的呢?
Arguments
上述问题我们可以利用js中的arguments来很好的解决,arguments的作用,就是在不知道用户输入多少参数的情况下使用的。使得函数参数有了极大的自由度。我们来看看arguments如何具体使用
例题,计算用户传入参数的和。(用户传入的参数个数无法确定)
<script>
//首先声明一个求和函数,不设置形式参数
function sum() {
//加入arguments
arguments;
//计算arguments的长度
arguments.length;
//输出arguments的长度
console.log('arguments的长度:'+arguments.length);
//声明一个变量记录累加值
var sum = 0;
//根据arguments的长度来循环累计
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
//抛出累加值
return sum;
}
//调用上面的函数并打印
console.log('函数计算结果:'+sum(12, 23));
</script>
上面代码的输出结果:
当函数调用的语句为:console.log('函数计算结果:' + sum(12, 23,35));时的结果
上面的代码中在定义sum()函数时,是没有写形式参数的,调用sum()时参数个数也是随便给的。程序没有报错,而且达到了题目要求。
不知道细心的你有没有发现arguments的长度是等于我们给的实际参数的个数的。而且我们使用循环的时候有一句arguments[i]这样的代码,这句代码什么意思,我们下一篇文章见分晓。
文章总结
- 一般情况下形式参数与实际参数应该保持一一对应的关系
- 当无法确定形式参数个数时,可以使用arguments在函数中接收参数
- arguments是有长度的,长度等于实际参数个数,得到arguments长度的语法arguments.length;
- arguments获取参数后,使用它接收的参数时可以借助循环,得到它接收的参数可以用arguments[i]的方式获取。