异步编程 :异步编程 函数式编程

什么是高阶函数

高阶函数是异步编程的基础,那么什么是高阶函数呢?

高阶二字听起来有点高大上的感觉,其实不然,高阶函数与普通函数不同的地方是高阶函数可以把函数作为参数,或者是将函数作为返回值,请看如下示例。

示例:

function test(v){
  return function(){
    return v;
  }
}

示例中是一个最简单的高阶函数,如你所见,高阶函数test的返回值是一个匿名函数。

定义一个高阶函数test,test有两个参数a和b,test返回一个将a和b相加的匿名函数。

function test(a,b){
  return function(){
    return a+b;
  }
}

现实应用

虽然有可能是第一次真正的去了解什么是高阶函数,但是其实我们在日常开发中经常会用到它,只是我们没有去留意或者说不知道它的称谓而已。

示例:数组的排序(sort)函数

var arr = [23,54,3,12,78];
arr.sort(function(a,b){
  return a-b;
});

有没有很熟悉的感觉,想一想常见的还有哪些高阶函数。

var test = [5,34,87,32,56,2,17];将数组test按从大到小进行排序,并打印排序结果。
var test = [5,34,87,32,56,2,17];
test.sort(function(a,b){
    return b-a;
});
console.log(test);

偏函数

什么是偏函数?

假设有一个参数或变量已经预置的函数A,我们通过调用A来产生一个新的函数B,函数B就是我们说的偏函数,有点拗口?请看示例:

var isType = function(type){
  return function(obj){
    return toString.call(obj)=='[object '+type+']';
  }
};
var isString = isType('String');
var isFunction = isType('Function');

isType函数中预置了判断类型的方法,只指定部分参数来产生的新的定制的函数isString和isFunction就是偏函数。

参考示例,定义一个判断数组类型的偏函数isArray(注意示例中object后的空格)。

var isType = function(type){
  return function(obj){
    return toString.call(obj)=='[object '+type+']';
  }
};
var isArray= isType('Array');

编写偏函数

学习了偏函数,试一试编写一个简单的偏函数!

Tom想编写一个函数say,通过传入不同的name参数,say函数可以创建出不同的偏函数,偏函数接受一个名为text的参数,执行偏函数时,控制台输出格式为:name+" say "+text,请帮助Tom编写say函数,通过say函数创建偏函数tomSay,并调用tomSay输出"tom say hello"。

var say =function(name){
    return function(text){
        console.log(name+' say '+text);
    }
};
var tomSay = say('tom');

tomSay ('hello');

课程小结

高阶函数和偏函数是异步编程的基础,熟练运用高阶函数和偏函数是非常必要的。

高阶函数 1. 函数作为参数; 2. 函数作为返回值; 偏函数 1. 一个创建函数的工厂函数; 2. 通过指定部分参数,定制新的函数;

全部评论(0)