zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    01.Sencha ExtJS 6
    02.Sencha ExtJS 6
    关于Jquery的delegate绑定事件无效
    细说 Form (表单)
    Rquest Request[""];Request.Form[""];Request.QueryString[""]
    一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
    vs 调试不进入断点
    HttpWebRequest类
    C# 利用 Windows服务模板 创建、安装与卸载Windows服务
    如何搭建win10 asp开发环境安装iis10
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/5120539.html
Copyright © 2011-2022 走看看