美文网首页
高阶函数

高阶函数

作者: 编程之上 | 来源:发表于2018-07-25 10:21 被阅读23次

概念

高阶函数 Higher-order function,简而言之就是将一个函数作为参数的函数。

在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

  • 接受一个或多个函数作为输入
  • 输出一个函数

条件一:接受一个或多个函数作为输入

javascript 的函数其实都指向某个变量。函数的参数能接收变量,那么也能接收一个函数,能接收函数作为参数的函数可称为高阶函数。

const sum = (x, y, f) => {
  return f(x) + f(y);
};

调用 sum(-1, 1, Math.abs)时,推导过程

x = -1; y = 1; f = Math.abs; f(x) + f(y) ==> Math.abs(-1) + Math.abs(1) ==> 1 + 1; return 2

用代码验证一下

sum(-1, 1, Math.abs); // 2

再举个例子,Array.prototype.sort 方法,接收一个参数作为参数,函数里面封装的是对数组进行排序的规则。

const arr = [1, 3, 5, 2, 4, 9, 0];
const desc = function(a, b) {
  return b - a;
};
arr.sort(desc);

编写高阶函数,就是让函数的参数能够接收别的函数。还有常见的事件绑定回调函数,ajax 回调函数等都属于高阶函数。

条件二:返回值输出

函数既可以作为参数传递输入,也可以作为其他函数的返回值输出。

高阶函数还可作为一种模式的构造器,比如若干排序算法(快排、冒泡、希尔等),就可以生成一个排序器。

const desc = (a, b) => {
  return b - a;
};

const sortGenerator = desc => {
  return (...args) => {
    return args.sort(desc);
  };
};

console.log(sortGenerator(desc)(1, 2, 3)); // [ 3, 2, 1 ]

或许你会好奇可以调用一次函数,为嘛多此一举?多包装一层就可以干很多额外的事。比如测试每个排列算法的耗时。

再举个 ajax 封装的例子,接收两个参数 method 和 callback,即请求类型和回调。每次都传入请求类型很麻烦,那么生成两个新的函数 ajaxGet 和 ajaxPost.

const ajaxGenerator = method => {
  return (url, callback) => {
    ajax(method, url, callback);
  };
};

const ajaxGet = ajaxGenerator("GET");
const ajaxPost = ajaxGenerator("POST");

ajaxGet("/v1/api/getUser", myCallback);
ajaxPost("/v1/api/getUser", myCallback);

以上像不像函数的柯里化,是的它属于高阶函数的降级。

相关文章

  • python学习(三)函数式编程

    高阶函数 函数也是变量,函数参数为函数的函数,称作高阶函数 自定义高阶函数 内建高阶函数 map/reducema...

  • 11.Lambda和高阶函数(Lambda and Higher

    高阶函数 kotlin_Lambda,高阶函数 *swift_高阶函数

  • Python | 高阶函数基本应用及Decorator装饰器

    一、高阶函数 理解什么是高阶函数?以及高阶函数的基本应用方法 ▲ 高阶函数 在了解什么是高阶函数之前,我们来看几个...

  • 四、函数进阶

    一. 高阶函数 参数类型包含函数类型或返回值类型为函数类型的函数为高阶函数。 常见的高阶函数 高阶函数的调用 二....

  • Kotlin 高阶函数

    什么是高阶函数 将函数作为参数或者返回值的,称高阶函数。 定义高阶函数 action是一个高阶函数,(Int) -...

  • 高阶组件

    高阶组件 先来引入这个概念 高阶函数是什么? 高阶函数就是一个函数返回一个函数eg: 高阶组件 类同 高阶组件就是...

  • [JS函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • HOC - High Order Component 高阶组件

    高阶函数 简而言之,可以接收函数作为参数的函数就是一个高阶函数。 上面的hoc函数就是一个高阶函数。 高阶组件 高...

  • Day10. 高阶组件

    1. 认识高阶函数 什么是高阶组件呢?认识高阶函数.png 高阶函数: 接收一个或多个函数作为输入, 输出一个函数...

  • Python高阶函数

    本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,...

网友评论

      本文标题:高阶函数

      本文链接:https://www.haomeiwen.com/subject/uttpmftx.html