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