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很强大啊!

原文地址:https://www.cnblogs.com/dongye/p/3263614.html