zoukankan      html  css  js  c++  java
  • JavaScript相关-深入理解函数

    1,函数的定义

    第一种定义方式:

    1 function fn1() {
    2     alert("fn1");
    3 }

    函数就是一个非常特殊的对象,是一个Function类的实例,其实在内存中存储的操作是通过一个键值对来存储的。

    alert(typeof fn1);

    由于函数是一个对象,所以可以通过第二种方式定义:

    1 var fn2 = fn1;
    2 fn2();

    函数虽然是一个对象,但是却和对象有一些区别,对象是通过引用的指向完成对象的赋值的,而函数却是通过对象的拷贝来完成的。所以fn1虽然变了,并不会影响fn2

    1 fn1 = function() {
    2     alert("fnn1");
    3 }
    4 fn2();
    5 fn1();

    对于对象而言,是通过引用的指向来完成赋值的,此时修改o1或者o2会将两个值都完成修改。

    1 var o1 = new Object();
    2 var o2 = o1;
    3 o2.name = "Leon";
    4 alert(o1.name);

     2,函数的传值

    由于函数是一个对象,所以可以把函数作为参数传值。

    1 function callFun(fun,arg){ //第一个参数是函数对象
    2     return fun(arg);
    3 }
    4 function fun(str){
    5     alert("hello"+str);
    6 }
    7 callFun(fun,20);

    另外一种情况

    1 function fn1(arg){
    2 
    3     function rel(num){
    4         return arg+num;
    5     }
    6     return rel;
    7 }
    8 var f = fn1(20); //此时,f指向了rel函数,f是一个函数对象
    9 alert(f(11));

    实例:排序问题

    1 function sortByNum(a,b){
    2     return a-b; //当进行减法的时候,会自动转换字符串为int
    3 }
    4 var as = [1,2,22,"11",95,13];
    5 as.sort(sortByNum); //传入函数进行排序
    6 alert(as);

    排序一般方法:使用name排序设置一个函数,如果使用年龄排序再写一个函数...如果...再...

    function Person(name,age){
        this.name = name;
        this.age = age;
    }
    var p1 = new Person("zhangsan",20);
    var p2 = new Person("lisi",25);
    var p3 = new Person("wangwu",22);
    var p4 = new Person("zhaoliu",21);
    var ps = [p1,p2,p3,p4];
    ps.sort(sortByName);
    function sortByName(obj1,obj2){
        return obj1.name<obj2.name ?  -1 : 1;
    }
    function show(){
        var p = document.getElementById("person");
        for (var i = 0; i < ps.length; i++) {
            p.innerHTML += ps[i].name+","+ps[i].age+"<br/>";
        }
    }
    show();

    排序的灵活方法:

     1 function Person(name,age){
     2     this.name = name;
     3     this.age = age;
     4 }
     5 var p1 = new Person("zhangsan",20);
     6 var p2 = new Person("lisi",25);
     7 var p3 = new Person("wangwu",22);
     8 var p4 = new Person("zhaoliu",21);
     9 var ps = [p1,p2,p3,p4];
    10 ps.sort(sortByProperty("age")); //此时通过传递不同参数就能实现相应排序 比如"age"
    11 function sortByProperty(propertyName){
    12     var sortFun = function(obj1,obj2){
    13         return obj1[propertyName]<obj2[propertyName] ?  -1 : 1;
    14     }
    15     return sortFun;
    16 }
    17 function show(){
    18     var p = document.getElementById("person");
    19     for (var i = 0; i < ps.length; i++) {
    20         p.innerHTML += ps[i].name+","+ps[i].age+"<br/>";
    21     }
    22 }
    23 show();

     js很强大啊!

  • 相关阅读:
    20200924-4 代码规范,结对要求
    20200924-2 功能测试
    20200917-1 每周例行报告
    20200917-3 白名单
    20200917-2 词频统计 已更新附加题!
    20200910-1 每周例行报告
    20200924-2功能测试
    20200924-1每周例行报告
    20200924-3单元测试
    20200924-5 四则运算,结对
  • 原文地址:https://www.cnblogs.com/dongye/p/3263614.html
Copyright © 2011-2022 走看看