caller和callee的区别

①、caller
    caller返回一个函数的引用,这个函数调用了当前的函数。
    使用这个属性要注意:
    1 这个属性只有当函数在执行时才有用
    2 如果在javascript程序中,函数是由顶层调用的,则返回null

    functionName.caller: functionName是当前正在执行的函数。
     例子1: 复制代码 代码如下:
    
       var a = function() { 
            alert(a.caller); 
          } 
    var b = function() { 
              a(); 
          } 
          b();
          上面的代码中,b调用了a,那么a.caller返回的是b的引用,结果如下: 
                
           例子2:返回NULL  
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            var a = function(){
                alert(a.caller);
            }
            a();
        </script>
    </head>
    <body>
    </body>
</html>

②、callee

  callee返回正在执行的函数本身的引用,它是arguments的一个属性
  使用callee时要注意:
    1 这个属性只有在函数执行时才有效
    2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
    3 它可以用来递归匿名函数。

           例子1:返回函数本身的引用

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

           a在b中被调用,但是它返回了a本身的引用,结果如下:

    

    例子2:获取函数的形参

                
 
总结:caller是返回调用该函数的引用
         callee是返回本身自己的函数
          
posted @ 2015-07-21 16:18  rookieDeng  阅读(3609)  评论(0编辑  收藏  举报