在js中一切都是对象,连函数也是对象,函数名实际上是引用函数定义对象的变量。数组
一、什么是arguments?函数
这个函数体内的arguments很是特殊,其实是所在函数的一个内置类数组对象,能够用数组的[i]和.length。spa
二、有什么做用?code
js语法不支持重载!但可用arguments对象模拟重载效果。对象
arguments对象:函数对象内,自动建立的专门接收全部参数值得类数组对象。
arguments[i]: 得到传入的下标为i的参数值
arguments.length: 得到传入的参数个数!blog
重载:io
程序中可定义多个相同函数名,不一样参数列表的函数,
调用者没必要区分每一个函数的参数,
执行时,程序根据传入的参数个数,自动判断选择哪一个函数执行。console
例子以下:function
// 一、若是用户传入一个参数,求平方 function sum(a){ console.log(a*a); } //若是用户传入两个参数,就求和 function sum(a,b){ console.log(a+b); } sum(4); //? sum(4,5); //?
上述例子中本意是想让同名函数sum()根据参数不一样输出不一样结果,可是sum是函数名字,本质也是个变量,class
第二个会覆盖第一个,因此上述的正确输出答案是:NaN,9.因此这样显然不能够。
若是用arguments,就简单多了。
以下2个例子:
//二、 function calc(){ //若是用户传入一个参数,求平方 if(arguments.length==1){ console.log(arguments[0]*arguments[0]); }else if(arguments.length==2){ //若是用户传入两个参数,就求和 console.log(arguments[0]+arguments[1]); } } calc(4); //16 calc(4,5); //9
/*三、不管用户传入几个数字,均可以求和*/ function add(){ //arguments:[] //遍历arguments中每一个元素,并累加 for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]); return sum;//返回和 } console.log(add(1,2,3)); //6 console.log(add(1,2,3,4,5,6)); //21
这就是JS利用arguments重载的效果,简单理解就是一个函数重复利用.
arguments.length是有实参决定,即函数调用时候里面的参数个数决定!