zoukankan      html  css  js  c++  java
  • callee和caller属性的区别

      在函数内部,有两个特殊的对象:arguments和this 。arguments是一个类数组对象,用于存放传入函数中的所有参数。

      callee是arguments对象的属性,caller是所有函数对象的属性。

    callee

    callee是一个指针,指向拥有当前arguments对象的函数,即返回正在执行的函数本身的引用

    使用callee时要注意:
    1 这个属性只有在函数执行时才有效
    2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length(实参长度)是否等于arguments.callee.length(形参长度)
    3 它可以用来递归匿名函数或者保证函数的封装性。

    //callee可以打印其本身
    function calleeDemo() {
        alert(arguments.callee);
    }
    //用于验证参数
    function calleeLengthDemo(arg1, arg2) {
        if (arguments.length == arguments.callee.length) {
            window.alert("验证形参和实参长度正确!");
            return;
        } else {
            alert("实参长度:" + arguments.length);
            alert("形参长度: " + arguments.callee.length);
        }
    }
    //递归计算
    var sum = function (n) {
        if (n < = 0)
            return 1;
        else
            return n +arguments.callee(n - 1)
    }

    举个例子

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

    a在b中被调用,但是它返回了a本身的引用。

    caller

    caller返回一个对函数的引用,该函数调用了当前函数。即这个属性中保存着调用当前函数的函数的引用。

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

    functionName.caller: functionName是当前正在执行的函数。

    举个例子

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

    上面的代码中,b调用了a,那么a.caller返回的是b的引用。

    但是,如果直接调用a(即a在任何函数中被调用,也就是顶层调用),返回null。

  • 相关阅读:
    jqgrid addRowData报错
    LINE 项目总结
    bootstrap-table 常用总结-树形结构(展开和折叠)
    bootstrap-table 常用总结-树形结构
    为wordpress的分类以及子分类指定固定模版
    wordpress主题开发-部分函数调用整理
    superslide滚动插件使用记录-产品滚动-图片滚动
    4GL之Non-SCROLLING CURSOR
    asp.net报表结构学习记录
    HTML基础教程_1
  • 原文地址:https://www.cnblogs.com/guorange/p/6652102.html
Copyright © 2011-2022 走看看