• 【JavaScript】Function类型


      JavaScript中,每个函数都是Function类的一个实例。

      也就是说每一个定义的函数名都是指向Function类型的一个实例。

      函数名中存放的是函数的指针(Function类型实例指针)。

      可以使用Function的构造函数实现,最后一个参数被视为函数体,如:

      var sum = new Function("num1","num2","return num1+num2");   //不推荐

      

    1.没有重载

      因为函数名中存放的是指针,重新定义相同的函数名时,不管参数签名是否一致,都会覆盖掉之前所存的函数。

      不存在重载。

      但是函数的重载还是可以实现,JavaScript中,当函数传入的参数与函数签名数量不相同时,仍可以运行(在函数体中加入判断参数是否存在的语句,避免出错)。

      这样也可以实现函数的重载。

     

    2.函数声明与函数表达式区别

      JavaScript在编译时会将函数的定义提前,即在调用之后才定义,也可以实现函数体的内容,如:

        alert(sum(10,10);        //输出20

        function sum(num1, num2){
          return num1 + num2;

        }

      

      而当使用函数的表达式时,编译到表达式时才会定义函数,因此如果像上例输出,会报错,如:

        alert(sum(10,10);        //unexpected identifier

        var sum = function(num1, num2){

          return num1 + num2;

        }

     

    3.作为值的函数

      因为函数名中存放的是指针,因此函数可以作为一个参数传入另外一个函数内部,如:

        function callSomeFunction(someFunction, someArgument){

          return someFunction(someArgument);

        }

     

        function add10(num){

          return num + 10;

        }

     

        var result1 = callSomeFunction(add10, 10);

        alert(result1);        //20

     

        function getGreeting(name){
          return "Hello, " + name;

        }

     

        var result2 = callSomeFunction(getGreet, "Nicholas");

        alert(result2);

     

        注意:使用不带圆括号的函数名是访问函数的指针,而非调用函数。

     

    4.函数内部属性

        函数内部有两个特殊对象:arguments和this。

        arguments主要用途是保存传入的参数,第一个参数为arguments[0],第二个为arguments[1]以此类推。

        当使用参数名改变参数的值时,arguments对应的值也改变,但不代表这两个指向同一个东西。

        arguments对象有一个名为callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

        

        this对象与C#和Jaca中的大致类似。

        函数对象的属性caller,保存着调用当前函数的函数的引用。

    5.函数内部方法

    function.length();

    function.apply();        P116

    function.call();     P117

    function.bind()    p118

  • 相关阅读:
    php No input file specified 错误提示
    yii 隐藏index.php
    phpstudy 配置 sqlserver
    xdebug3 配置信息
    composer 更新
    mysql 命令行 导入大型文件
    使用 DBExportDoc V1.0 For MySQL 导出数据库表结构说明文档
    聚合数据接口调用实例
    servlet
    JDBC
  • 原文地址:https://www.cnblogs.com/junxcode/p/5021718.html
Copyright © 2020-2023  润新知