arguments是什么?
-
arguments
是收到的实参副本,对于超出形参个数之外的实参, 可以通过arguments
来获得; -
arguments
不是数组, 是(长的比较像数组的)一个对象,有length
属性(属性代表实参的个数); -
arguments
的索引 从0, 1,2,....
递增,与实参逐个对应; - 每个函数都会有
arguments
,因此,arguemnts
只会在内部找自身的arguments
,无法引用到外层的arguments
;
arguments有什么作用?
- 在javascript中,不需要明确指出参数名,就能访问它们。
function hi(){
if(arguments[0]=="andy"){
return;
}
alert(arguments[0]);
}
//用arguments[0]可以访问第一个参数,如此类推。
- 利用
arguments
对象可以实现重载,利用arguments.length
可以获取函数的参数个数,如下:
function hi(){
if(arguments.length==1){
alert(arguments[0]);
}else if(arguments.length==2){
alert(arguments[0] + arguments[1]);
}
}
- arguments的值永远与对应命名参数的值保持同步
function doAdd(num1, num2){
arguments[1] = 10;
alert(arguments[0] + num2);
}
每次执行doAdd()
函数都会重写第二个参数,将其值该为10.因为arguments
对象中的值会自动反应到对应的命名参数。但需要声明的是它两的内存空间是独立的,但值会同步。(严格模式下不允许这样做)
自己定义arguments时,会出现什么问题?
- 会报错;