相信大家对于js的函数也有基本的了解.
function fn(a,b,c){
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
fn(1,2,3);//对于这段代码的执行,毫无疑问的1,2,3.
那下面这段代码呢?
function fn(a,b,c){
var a=10;
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
fn(1,2,3);//弹出 10,2,3
发现有点不一样了吧,这段代码说明了arguments里面的值和参数名称是存在引用关系的.
如果不小心参数名和里面定义的变量名重名,下次使用arguments来取值的时候就会发生错误,所以大家一定要细心一点点;
有些人喜欢使用arguments来操作函数传入的值
function fn(){
var a=10;
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
fn(1,2,3);//弹出1,2,3
这样可以避免函数里面有重复的变量名而引起参数值,使用方法引人而异吧!
如果传入的参数有个重复的会怎样?
function fn(a,b,a){
var a=10;
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);
}
fn(1,2,3);//会弹出什么呢?
这个结果是什么? 肯定会让你大跌眼镜;
为什么会这样,又牵扯到了js的预处理,不懂预处理的可以在博客里面搜索看看,我就不详细解释了
大概就是在函数开始运行时会创建跟参数名相同的变量并赋值再和arguments对象产生引用关系,
所以arguments[0]被赋值为1,arguments[1]被赋值为2,到第三个的时候,参数名称出现重复了,然后arguments[0]和a之间的引用就断了,然后arguments[2]和a变量的之间的引用就会断了,然后a的值的改变就
不会影响到arguments[0]的值;
以上就是我对arguments的一些理解,如有错误,还请各位大神指出!