天天看點

js:深入函數(函數是對象)

//由于函數是對象,是以可以直接把函數通過參數傳遞進來;也可以把函數作為傳回值。

function calfun(fun,arg){

  //第一個參數就是函數對象

  return fun(arg);

}

function sum(num){

  return num+100;

function say(str){

  alert("hello "+str);

//調用了say函數

callfun(say,"js"); //hello js

//調用了sum函數

alert(callfun(sum,100)); //200

function fun1(arg){

  var rel = function(num){

    return arg+num;

  }

  return rel;

}  //傳回的是一個函數對象

//f是一個函數對象,可以完成調用

var f = fun1(20);

alert(f); //function(num){return arg+name;}

alert(f(30)); //50

var arr = [1,2,33,12,198];

arr.sort();

alert(arr);  //1,12,198,33   對于js而言,預設是按照字元串進行排序的。

//如果我們希望通過數字大小來排序,可以通過如下方式:

function sortbynum(a,b){

  return parseint(a)-parseint(b);

alert(arr);  //1,2,12,33,198

//根據對象來排序

function person(name,age){

  this.name=name;

  this.age=age;

var p1 = new person("john",23);

var p2 = new person("lemo",39);

var p3 = new person("ada",41);

var ps = [p1,p2,p3];

//ps.sort(sortbyage);

//ps.sort(sortbyproperty("age"));

function sortbyname(obj1,obj2){

  return obj1.name>obj2.name?1:(obj1.name==obj2.name?0:-1);

} //按名字排序

function sortbyage(obj1,obj2){

  return obj1.age-obj2.age;

} //按年齡排序

//通過上述方法來處理排序,帶來的問題是需要為每一個屬性建立一個函數,顯然不靈活

//但是如果通過函數的傳回值調用就不一樣了。

function sortbyproperty(propertyname){

  var sortfun = function(obj1,obj2){

    return obj1[propertyname]>obj2[propertyname]?1:(obj1[propertyname]==obj2[propertyname]?0:-1);

  return sortfun;

原創文章如轉載,請注明出處,本文首發于csdn網站:

js