美文网首页web前端Web前端之路编程人生
callee、caller、this在function中的作用

callee、caller、this在function中的作用

作者: 璀璨天宇 | 来源:发表于2017-07-10 07:55 被阅读23次

    Function中有两个属性,arguments与this会比较常用到。

    一、arguments

    arguments只能在函数中使用,首先我们将arguments弹出来看一下。

    function fn(){
      console.log(arguments);
    }
    

    在chrome的控制台中弹出来看看


    发现arguments是一个数组形式的,但到底是不是数组,接着看。

    function fn(){
      console.log(typeof arguments);//加typeof判断类型
    }
    

    发现arguments不是数组而是一个对象,只是它长的像一个数组。可以看到arguments中有一个callee属性,它指向该函数本身。下面来看一下应用。

    1.定义函数

    //最简单的阶乘函数
    function fn(num){
        if( num<=1 ) return 1;
        else return num * fn(num-1);
    } 
    //执行
    fn(10)  //返回3628800
    

    但是函数体中,函数的执行与函数名fn 紧密的耦合在一起,比如let foo = fn; 执行foo();函数是不能正常工作的。为了消除这种紧密的耦合,使函数更加纯方法,就用到了callee

    2.改写函数fn()

    function fn(num){
        if( num<=1 ) return 1;
        //else return num * fn(num-1);
        else return num * arguments.callee(num-1);
       //将原来的fn()用  arguments.callee来代替,解耦了与函数名的依赖
    }
    

    还有一个属性,arguments.callee.caller顾名思义caller就是函数的调用者是谁,写一个例子就明白了。

    function outer(){
        inner();
    }
    function inner(){
        alert(arguments.callee.caller);
    }
    // 执行
    outer();  //弹出function outer(){...}
    //指向调用者outer;
    

    二、this

    在JavaScript中this是动态的,运行时决定this指针指向谁。如果函数在全局作用域下执行,this就指向window或global,所以this是指向函数当前执行环境下的所有者。

    相关文章

      网友评论

        本文标题:callee、caller、this在function中的作用

        本文链接:https://www.haomeiwen.com/subject/ldfyhxtx.html