• JavaScript中callee,caller,argument的理解


    argument代表当前函数的参数数组;

    1、callee的用法:

    argument.callee表示谁引用的这个函数

    其他解释:(arguments.callee表示引用当前正在执行的函数,或者说是调用arguments.callee的函数对象的引用,它给匿名函数提供了一种自我引用的方式。通过如下例子,可以更好的理解概念。)

    例如:var fun=function(){

      console.log(fun===argument.callee)

    }

    fun();   //true;

    执行上述代码,可以看到alter出来的结果是true,注意,此处用的是“===”,就是说func与arguments.callee对象类型和值都相等。

    用在递归上,例如:

    var r2=(function(n){

      if(n>1){

        return n*argument.callee(n-1);

      }else{

        return 1;

      }

    })(n)

     2、caller的用法:

    返回一个函数的引用,该函数调用了当前函数

    functionName.claaer

    functionName 对象是所执行函数的名称

    对于函数来说,claller只有在函数被调用时才有定义,如果函数是有顶层调用的,那么caller包含的就是null,如果在字符串上下文中调用,那么caller属性,那么结果和 functionName.toString 一样,也就是说,显示的是函数的反编译文本。

    代码

    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// caller demo {
    function callerDemo() {
    if (callerDemo.caller) {
    var a= callerDemo.caller.toString();
    alert(a);
    } else {
    alert("this is a top function");
    }
    }
    function handleCaller() {
    callerDemo();
    }

    handleCaller();//弹出handleCaller的定义

  • 相关阅读:
    Log4J日志整合及配置详解
    SmartGit/Hg 4.0.1 发布
    Test Kitchen 0.7.0支持在OpenStack上对Opscode Chef进行集成测试
    RubyGNOME2 1.2.0 发布,支持 GTK+ 3
    PowerDNS Recursor 3.5 RC1 发布
    用于展现图表的50种JavaScript库
    Lambda表达式现状分析
    Node.js 0.8.18 / 0.9.7 发布
    CRUX 3.0 发布,轻量级 Linux 发行版
    Google 更新浏览器内的手写识别技术
  • 原文地址:https://www.cnblogs.com/makan/p/4710693.html
Copyright © 2020-2023  润新知