js中callee和caller

caller
  1. 函数fun的caller返回调用fun的函数对象,即fun的执行环境,如果fun的执行环境为window则返回null;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function fun(){
    console.log(argument.callee.caller);
    //argument.callee.caller必须写在fun中,
    //因为argument,caller只在执行时才有效。
    }
    fun();
    //结果为null

    function a(){
    fun();
    function fun(){
    console.log(fun.caller)//这里必须写在fun里面,因为caller只有函数执行过程中才有效
    }
    }
    a();

    结果为: a函数
    这里写图片描述

    js中callee关键字的作用
    1. callee关键字的定义:在函数内部使用,代表当前函数的引用(名字)。

    2. 作用:降低代码的耦合度。

    3. 耦合度的定义:一处代码的修改会导致其他代码也要发生改变(耦合度高)在项目里边要开发低耦合度的代码(一处代码修改尽量少地引起其他代码的变化)。

    4. 语法结构

      1
      2
      function f1(){arguments.callee();}
      f1();

    实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <script type="text/javascript">
            function jiecheng(n){
                if(n==1){
                    return 1;
                }
                //return n * jiecheng(n-1);
                //callee可以保证外部名称的变化,不会引起内部代码的修改,代码耦合度降低
                return n * arguments.callee(n-1);
            }
            //要把jiecheng名称换成其他的名字进行使用

            var jc = jiecheng; //对象赋值,其为引用传递

            jiecheng = null;  //销毁jiecheng函数对象,后期不使用了
            console.log(jc(4)); //输出24
            var jd = jc;
            jc = null;
            console.log(jd(6)); //输出720
    </script>

    callee返回正在执行的函数本身的引用。callee是arguments的一个属性,这个属性是一个指针,指向这个拥有arguments对象的函数,(arguments是调用函数,那么这个callee就是调用函数的啦)

    完整项目实例:

    https://nikita-chuyin.github.io/2020/03/09/canvas%E7%BB%98%E5%88%B6%E7%A2%B0%E6%92%9E%E7%90%83%E5%8A%A8%E7%94%BB/

文章目录
  1. 1. caller
  2. 2. js中callee关键字的作用
  3. 3. 完整项目实例:
|