zoukankan      html  css  js  c++  java
  • JavaScript的Function 类型

    一,Function定义

      Function实际上是对象,与其他引用类型一样具有属性和方法。Function可以通过三种方法进行定义,分别是函数声明语法定义,函数表达式定义和Function构造函数定义。

      1.函数声明语法定义

    function functionName(value1...){
        //函数体
    }

      2.函数表达式定义

    var functionName = function(value1...){
        //函数体
    }

      3.Function构造函数定义

      通过Function构造函数创建函数,可向构造函数中传入任意数量的参数,但值得注意的是传入的最后一个参数会作为函数体,而其他参数则作为参数传入函数中。用该方法去定义函数是不推荐使用的,因为该语法会导致解析两次代码,第一次解析常规ECMAScript代码,第二次解析传入构造函数的字符串,影响性能。

    var functionName = new Function("value",...,"函数体");

      注:函数是引入值类型,所以函数名仅仅是指向函数的指针,当使用函数名去赋值给另一个变量名时,仅仅复制的是一个指针。即在下列a设置为null时,仅将a存的指针消除而已,不会影响b调用函数。

    var a = b = function(value1){
        return value1;
    }
    a = null;
    b(1);

    二、函数的重载

      函数本身是没有重载的,因为在JavaScript中,函数可接收任意个参数,故不会因参数数量不同而发生函数重载。但可以通过特殊的写法实现函数重载。

      思路:利用函数内部属性arguments.length去判断,进行传入不同参数的不同处理,从而实现函数的重载。

    三、函数声明与函数表达式的区别

      解析器对这两种定义函数方法的解析是不一样的。解析器会将函数声明的函数优先解析,使其在代码执行前可用(函数声明提前)。而函数表达式会在执行到该行代码才会被解析。

    四、闭包
      面试题:将数组中的对象,按某个属性进行排序。

      思路:利用数组的sort()接收一个对比函数,该对比函数是另一个函数的返回值。

    var arr = [{name:"lyf",age:20},{name:"gulu",age:18}];
    function nameSort(name){
        return function(obj1,obj2){
            return obj1[name]-obj2[name];
        }
    }
    arr.sort(nameSort("age"));

    五、函数内部属性

      1.arguments:包含函数所有参数的伪数组。

              其arguments.callee属性指向含有该arguments对象的函数。该属性可用于递归函数的函数调用。

      例:一个阶乘函数的写法。

    function factorial(num){
        if(num<=1){
            return 1;
        }else{
            return num*arguments.callee(num-1);
        }
    }//好处:低耦合

      2.this:函数执行的环境变量。

      3.caller:调用当前函数的函数引用。

      例:

    function a(){
        console.log(a.caller);//指向调用a的b
    }
    function b(){
        a();
    }
    b();

    六、函数的属性和方法

      1.length:该属性指定义函数时,需要传入参数的个数。使用为:函数名.length;

      2.prototype:原型函数。

      3.apply和call:方法均改变调用函数的环境对象,简而言之就是改变函数的this值。两者除了传入参数的方式不同外,没有什么区别。apply在传参时,可传入数组或伪数组arguments,call是将参数依次列出传入函数的,具体看以下语法。

        apply(环境对象,[value1,...])或apply(环境对象,arguments)。

        call(环境对象,value1,value2...)

      4.bind()

        创建一个函数实例,其this值会被绑定到传给bind()函数的值。

    window.age = 20;
    var lizi = {age:18};
    function sayAge(){
        alert(this.age);
    }
    var say = sayAge.bind(lizi);
    say();//18
  • 相关阅读:
    tsung基准测试方法、理解tsung.xml配置文件、tsung统计报告简介
    用指针方式,实现大小写字母户转,数字不变,遇到其他字符则停止转换并输出
    重写strcat函数,以实现strcat的功能
    重写strcpy函数,以实现strcpy的功能
    用指针的方式实现,重写strrchr函数的功能
    求指定整数范围内的素数之和
    求指定整数数组的中位数
    求一个数的阶乘
    LR中变量、参数的使用介绍
    Linux Shell流程例子
  • 原文地址:https://www.cnblogs.com/whiteMu/p/7399719.html
Copyright © 2011-2022 走看看