JavaScript中的Function类

作者: Shaneee | 来源:发表于2017-06-26 11:25 被阅读0次

    每个函数都是Function类型的实例

    三种创建函数的方法:

    // 方法一
    function sum(num1, num2) {
      return num1+num2;
    }
    
    //方法二
    var sum = function(num1, num2) {
      return num1+num2;
    };
    
    //方法三
    var sum = new Function(“num1”, “num2”, “return num1+num2;”);
    

    最好不用方法三去创建函数,但是方法三可以更清晰的看到,函数就是一个对象,通过new实例化得到。而函数名就是一个保存此对象的引用

    也正是因为函数名就是一个特殊的变量,所以,在JavaScript中,没有函数重载这一说,有的只是覆盖

    函数声明提升:函数的声明可以提升到作用域的顶层,从而在函数创建之前调用函数也不回导致错误:

    alert(sum(1, 2));
    function sum(a, b) { return a + b }
    

    上面说到函数其实就是一个特殊的变量,所以作为一个值的函数有以下作用:

    1. 函数作为另一个函数的参数
    2. 函数作为另一个函数的返回值

    在函数内部有两个特殊的对象:arguments, this 。

    arguments:arguments是一个类数组对象,里面保存着调用函数时传入函数的参数
    arguments有一个叫callee的属性,arguments.callee保存着这个函数的引用。

    this:this引用的是函数执行的环境对象。

    函数作为对象本身有两个对象:length, prototype 。

    length:length属性是声明函数时参数的个数。

    prototype:prototype里面保存着Function类的实例方法。

    函数作为对象有三个方法:call(), apply(), bind() 。

    三个方法的作用都是改变函数内部的this对象的引用。

    apply():apply方法的第一个参数是一个对象,用来替代调用该方法的函数的this,第二个是一个数组,保存着函数的参数。

    call():call方法的第一个参数的作用与call相同,不同的是,后面的参数可以是多个,每一个都是函数的参数。

    bind():bind方法也可以修改作用域,但不同的时,此方法会返回一个新的函数,这个新的函数中的this会是bind方法中传入的参数对象。

    相关文章

      网友评论

        本文标题:JavaScript中的Function类

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