zoukankan      html  css  js  c++  java
  • arguments对象,caller 和 callee

    arguments对象是比较特别的一个对象,arguments非常类似Array,但实际上又不是一个Array实例。

    它指的是函数对象里的参数,且只能在函数内部使用。

    使用

      检测函数的参数个数,引用属性 arguments.length。

      访问:arguments[0] 

    1.arguments对象的长度是由实参个数而不是形参个数决定的。

    function a(a,b,c){
      console.log(arguments.length)
      console.log(arguments[3])
      b=b-a;
      console.log(b)
    }
    a(1,2);//2 undefined 1

    2.JavaScript中函数是不能重载的。

    如何实现重载呢?

    function fn(){
                switch(arguments.length){
                    case 0:
                        //执行语句块
                        break;
                    case 1:
                        //执行语句块
                        break;
                    case 2:
                        //执行语句块
                        break;
                }
    }

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

    function a(a){
    if(a==1){return 1}
    return a+arguments.callee(--a);
    }
    a(10);//55
    function ass(a,b,s){
        console.log(arguments.callee.length);
        console.log(arguments.length);
    }
    assl(1,2);//3 2

    arguments.length是实参长度,arguments.callee.length是形参长度

    caller 返回一个函数的引用,这个函数调用了当前的函数。

    使用这个属性要注意:

    1 这个属性只有当函数在执行时才有用
    2 如果在javascript程序中,函数是由顶层调用的,则返回null

    function b(){
        a()
    }
    function a(){
        alert(a===arguments.callee);//true
        alert(arguments.caller=b);//function b(){a()}
        alert(arguments.callee.caller===b);//true
    }
    b();
    var a = function() {   
        alert(a.caller);   //null
    }   
    a(); 

     var a = function() {
          alert(arguments.callee);
     }
     a();//var a = function() { alert(arguments.callee); }

     
  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/mina-huojian66/p/6094474.html
Copyright © 2011-2022 走看看