是什么
arguments对象是函数参数对象,在js中声明函数和调用函数传递的参数个数可以不同,因为在js函数中,参数是以一个数组形式接收的,这个数组里可以没有值,可以多个值;可以通过arguments[索引]访问参数值,
function doAdd(num1, num2){ arguments[1] = 10 return num1+num2 }
他是类似数组的一个对象,可以通过arguments[索引]获取调用的参数值,也可以通过length获取传递进来多少个参数
注意
- 命名的参数只是为了便利,可以不需要,可以直接调用并传递参数,内部用arguments[0]来接收
- 可以通过length获取传递进来的参数个数
- 命名参数和arguments对象可以一起使用
-
arguments的值始终和明明参数一致,单向的,arguments[i]变,对应第i哥参数也会变化,他们各自是独立的内存空间,但是就是会同步更新;但是命名参数变化,不会反过来影响arguments对象
-
arguments的length是由调用时传入的参数个数决定,不是声明函数时长度决定;
-
调用时只传递一个参数,那么修改arguments[1]为undefined
-
js函数没有重载,同一个方法不同声明,采用后者
补充
arguments对象有一个属性叫做calle,是一个指针,指向拥有arguments对象的方法;比如上图中,doADD里边arguments.callee就是 function doAdd(){}自己,作用是不让函数体与名字过于耦合,用于阶乘较多
caller属性是函数的属性,doAdd.caller用来存储调用了当前函数的函数的引用,全局调用为null