高阶函数

1.函数作为参数调用

function f1(fn){
	console.log("f1函数");
	fn();
}
//传入匿名函数
f1(function(){
	console.log("aa");
});
//命名函数
function f2(){
	console.log("f2函数");
}
f1(f2);

//定时器的使用
function f3(fn){
	setInterval(function(){
		console.log("定时器开始");
		fn();
		console.log("定时器结束");
	},1000);
}
/*f3(function(){
	console.log("好困啊,好累啊");
})*/

2.函数作为返回值使用

///函数作为返回值使用
function getFunc(type){
	return function(obj){
		return  Object.prototype.toString.call(obj)==type;
	}
}
//
var ff=getFunc("[object Array]");
var result=ff([10,20,30]);
console.log(result);
 var ff1 = getFunc("[object Date]");
 var dt = new Date();
 var result1 = ff1(dt);
 console.log(result1);

  

3.函数作为返回值小案例

//排序,每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序

    //三部电影,电影有名字,大小,上映时间
    function File(name, size, time) {
      this.name = name;//电影名字
      this.size = size;//电影大小
      this.time = time;//电影的上映时间
    }
    var f1 = new File("jack.avi", "400M", "1997-12-12");
    var f2 = new File("tom.avi", "200M", "2017-12-12");
    var f3 = new File("xiaosu.avi", "800M", "2010-12-12");
    var arr = [f1, f2, f3];

    function fn(attr) {
      //函数作为返回值
      return function getSort(obj1, obj2) {
        if (obj1[attr] > obj2[attr]) {
          return 1;
        } else if (obj1[attr] == obj2[attr]) {
          return 0;
        } else {
          return -1;
        }
      }
    }

    var ff = fn("name");

    //函数作为参数
    arr.sort(ff);
    for (var i = 0; i < arr.length; i++) {
      console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
    }

  

原文地址:https://www.cnblogs.com/liushisaonian/p/9460875.html