js关于arguments和参数名称重复的问题

相信大家对于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的一些理解,如有错误,还请各位大神指出!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值