• 传递给函数的隐含参数:arguments及递归函数的实现


    传递给函数的隐含参数:arguments
    当进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。
    arguments是一个类似数组但不是数组的对象,说它类似是因为它具有数组一样的访问性质,
    可以用arguments[index]这样的语法取值,拥有数组长度属性length。arguments 对象存储的
    是实际传递给函数的参数,而不只局限于函数声明所定义的参数列表,例如:
    function func(a,b){
    alert(a);
    alert(b);
    for(var i=0;i<arguments.length;i++){
    alert(arguments[i]);
    }
    }
    func(1,2,3);
    代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数
    列表,仍然可以通过arguments 引用到所获得的参数,这给编程带来了很大的灵活性。
    arguments对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函
    数的递归或者保证函数的封装性,例如使用递归来计算1 到n的自然数之和:
    var sum=function(n){
    if(1==n)return 1;
    else return n+sum(n-1);
    }
    alert(sum(100));
    其中函数内部包含了对sum自身的调用,然而对于JavaScript来说,函数名仅仅是一个
    变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,
    所以使用arguments.callee属性会是一个较好的办法:
    var sum=function(n){
    if(1==n)return 1;
    else return n+arguments.callee(n-1);
    }
    alert(sum(100));
    callee属性并不是arguments不同于数组对象的唯一特征,下面的代码说明了arguments
    不是由Array类型创建:
    Array.prototype.p1=1;
    alert(new Array().p1);
    function func(){
    alert(arguments.p1);
    }
    func();
    运行代码可以发现,第一个alert 语句显示为1,即表示数组对象拥有属性p1,而func
    调用则显示为“undefined”,即p1 不是arguments的属性,由此可见,arguments并不是一个
    数组对象。

  • 相关阅读:
    HashMap的理解
    红黑树
    No constructor found matching
    会话 控制终端 setsid
    信息表示和处理 from computer system chapter 2
    tcp keepalive
    TCP 四步挥手
    CS 课程
    close vs shutdown socket
    Linux time总结
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3905373.html
Copyright © 2020-2023  润新知