一、arguments不是javascript保留字。
这意味着不要使用arguments作为变量名,不要为arguments赋值。
(function(a,b,c){
alert(arguments);
})('aa','bb','cc');
(function(a,b,c){
arguments = [1,2,3];//错误,不要使用arguments作为变量名,不要为arguments赋值。
alert(arguments);
})('aa','bb','cc');
二、arguments在函数中具有特殊意义。
arguments在函数中指向Arguments object,Arguments object是该由函数的Call object初始化的一个属性,arguments
不是数组,虽然操作看起来像数组。arguments与函数的形参指向同一块内存,改变任何一个,即改变了另一个。
(function(a,b,c){
//改变形参
a = "newa"
alert(arguments[0]);
//arguments的长度为2
alert(arguments.length);
//改变第三个参数或为第三个参数赋值
arguments[2]="new c";
alert(c);
//arguments的长度依然为2,也证明arguments不是数组。
alert(arguments.length);
//指定arguments的长度为3
arguments.length=3;
alert(arguments.length);
})('aa','bb');
三、arguments有callee属性。
arguments.callee返回了一个正在执行的函数的引用,例如下面的匿名递归函数。
//递归的从1加到100
result = (function(a,b){
if(typeof a != "number" || typeof b != "number" || a > b){
throw new Error("参数不合法");
}
if(a<1*b){
return a+arguments.callee(++a,b);
}
if(a==b){return a;}
})(1,100);
alert(result);
没有评论:
发表评论