• js:argument


    引用:http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html

         http://www.cnblogs.com/Fskjb/archive/2011/10/27/2227111.html

    arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

    <script>
            function f(a, b, c) {
                alert("a:" + a)             // result: "1"
                alert("b:" + b)             // result: "2"
                alert("c:" + c)             // result: "undefined"
    
                alert("arg:" + arguments[0]);       // result: "1"
                alert("arg:" + arguments[1]);       // result: "2"
                alert("arg:" + arguments[2]);       // result: "undefined"
    
                alert("length:"+arguments.length);   // result: "2"
                /*我修改a之后,arguments[0]跟着也变了*/
                a = 100;
                alert("arg:"+arguments[0]);       // result: "100"
                alert("a"+a)                   // result: "100"
                /*我修改arguments[0]之后,a的值也跟着变了*/
                arguments[0] = "qqyumidi";
                alert("a:"+a);                  // result: "qqyumidi"
    
                /*但是修改c的值,argments[2]却没有改变*/
                alert(c);                  // result: "undefined"
                c = 2012;
                alert("c:"+c)              // result: "2012"
                alert(arguments[2]);       // result: "undefined"
            }
    
            f(1, 2);
        </script>

    arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

    如下:

        <script>
            function count(a) {
                if (a == 1) {
                    return 1;
                }
                //alert(arguments.callee);
                //如果把上面的注释去掉,那么alert出来的就是如下的注释内容
                //function count(a) {
                //    if (a == 1) {
                //        return 1;
                //    }
                //    alert(arguments.callee);
                //    return a + arguments.callee(--a);
                //}
                return a + arguments.callee(--a);
            }
    
            var mm = count(10);
            alert(mm);    //result: 55
           
        </script>

    有件事情我们需要注意下,在定义函数的时候,无论我们规定了参数的个数是几个。Javascript允许我们传递任何数量的参数到一个函数里,不管怎么定义这个函数。Arguments对象对这些都是允许的。比如下面,我们定义的参数个数是3个,但是我们传了5个也是可以的。

    <script>
            function f(a, b, c) {
                alert("arg:" + arguments[0]);  //result:1
                alert("arg:" + arguments[1]);  //result:2
                alert("arg:" + arguments[2]);  //result:3
                alert("arg:" + arguments[3]);  //result:4
                alert("arg:" + arguments[4]);  //result:5
                       }
    
            f(1, 2,3,4,5);   
      </script>
  • 相关阅读:
    Vue学习笔记(4)-带参数路由,嵌套路由,编程式导航
    JS数组&&数组对象去重
    Vue学习笔记(3)-品牌管理系统
    Vue学习笔记(2)-组件生命周期
    负margin
    CSS布局奇淫巧计之-强大的负边距
    由浅入深漫谈margin属性
    双飞翼布局和圣杯布局的对比
    圣杯布局的实现过程
    CSS实现垂直居中的5种方法
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/5120539.html
Copyright © 2020-2023  润新知