什么是高阶函数

简介: 什么是高阶函数

名称:什么是高阶函数


目录:一、介绍二、高阶函数的本质二、高阶函数的本质字数:大约600字
AI 代码解读

一、介绍


高阶函数:看上去很高大上的样子,其实也很简单,只需要满足以下两个条件中任何一个即可。


第一个条件:函数作为函数的参数。


第二个条件:返回一个函数。


听上去,这个高阶函数离我们很远很远,其实不是,你其实每天都在用高阶函数,甚至可以说,你每个js文件都用到高阶函数。


例如以函数作为参数:


const arr = [1,2,3,4,5];arr.map(item => item + 10)arr.filter(item => item % 2 === 0)numbers.reduce((accumulator, currentValue) => accumulator + currentValue);setTimeout(() => {
  }, timeout);dom.addEventListener('click', () => {
  })
AI 代码解读

例如以函数作为返回值:


function a(){
  }const b = a.bind({})
AI 代码解读

那为什么js要有高阶函数,其实如果js没有高阶函数,那真是不知道该怎么写了,上面的方法都不能那样写。


二、高阶函数的本质


那到底js高阶函数有什么用呢。这个问题其实涉及到高阶函数的本质。在函数式编程里面,他把每一个函数看作是一个运算,它认为函数的本质就是运算,给我一些就给你算出一些东西,而高阶函数表达是什么呢,表达的是运算的缺失和延续,怎么理解,我们先来看缺失。


我们来看看这个map,当你自己去写一个map函数的时候,你会怎么写呢,我的目标是返回一个数组,遍历原数组,经过一套规矩,转换成新的值,把新的值,放到新的数组里,它的基本逻辑就是这样。


function map() {
    const result = [];  for (let i = 0; i < 愿数组.length; i++) {
      愿数组[i] --> 新的值    result.push(新的值)  }}
AI 代码解读

但是你仔细想想,在上面代码,是不是有个拼图是缺失的,什么拼图,就是


愿数组[i] --> 新的值
AI 代码解读

这里需要一个运算,把原数组里面的值通过一定的运算,转换成新的值,我在写这个函数的时候,缺失了一个运算,而这个运算,本质上就是一个函数,你需要给我传进来,把这个拼图补上,


function map(fn) {
    const result = [];  for (let i = 0; i < 愿数组.length; i++) {
      const 新的值 = fn(愿数组[i])    result.push(新的值)  }}
AI 代码解读

所以,如果函数作为参数进来,那么就意味着这个方法有个运算的缺失,需要用高阶函数来表达。


而另一方面,你写一个bind函数。


function bind(thisArg) {
     const fn = 绑定了this的函数,   return fn;}
AI 代码解读

这个bind函数,只负责生成这个函数,但是这个函数在什么时候运行,我不知道,也可以现在调用,也可以将来某个时候运行,都不清楚,那怎么办呢,那就把这个函数返回.


用的人,拿到这个返回值,就拿到这个函数,将来他在任何时候都可以调用这个函数,实际上调用的是bind函数里面的功能。也就是,虽然bind执行完啦,但是没有结束,他的功能会延续到外层,在将来的某个时候发挥作用,这个就是运算的延续。


三、总结


我们在运算缺失的时候,需要函数作为参数,我们需要对运算作为延续的时候,需要函数作为返回值。


虽然在js里面可以看见各种高阶函数,但是底层逻辑都是一样的。


学习了高阶函数,很多时候你可以又用不到,为什么这么说呢,因为一般代码都是出现在公共代码里面,都是中高级开发者封装好的方法。


相关文章
深度学习部署:Windows安装pycocotools报错解决方法
 pycocotools即python api tools of COCO。COCO是一个大型的图像数据集,用于目标检测、分割、人的关键点检测、素材分割和标题生成
1679 0
一杆到底:DSL 领域特定语言
一、DSL了解1、DSL介绍DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言。 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单。说到DSL,大家也会自然的想到通用语言(如Java、C等)。为什么没有一种语言同时 兼具『简洁』和『业务表达』能力呢?从信息论本质上来讨论这个问题,每个语言的程序都可以抽
16110 0
一杆到底:DSL 领域特定语言
函数式编程概念和应用
函数式编程的核心要素:传入参数,执行逻辑,返回值,也可以没有返回值。函数式的编程风格侧重描述程序的执行逻辑,不是执行过程。
307 0
函数式编程概念和应用
从生产到消费,基于物料的前端开发链路
作者通过一些实际的案例,分享基于物料进行前端开发的链路,欢迎接入使用。
从生产到消费,基于物料的前端开发链路
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问