• JS初识高阶函数和函数柯里化


    一、高阶函数

    基本概念

    满足下列条件之一,即为高阶函数

    • 一个函数接收的参数也是一个函数。
    • 一个函数返回的也是一个函数。

    简单示例

    给大家一个例子看一下:
    以下的fun以及fun1两个函数都可以称为高阶函数。

    function fun(callback){
    	console.log('执行fun函数')
    	callback()
    }
    function back(){
    	console.log('执行back函数')
    }
    fun(back) //接收一个函数作为参数
    
    
    function fun1(){
    	console.log('执行fun函数')
    	return function back1(){
    	console.log('执行back函数')
    			}
    }
    console.log(fun1()()) //调用该fun1函数时会返回一个函数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    看到这里相信大家已经明白了高阶函数是什么了,是不是一个很简单的东西呢。那接下来我们再来看看在我们常用的函数中有哪些函数是高阶函数吧。

    常见高阶函数

    Promise、定时器(setTimeout、setInterval)、数组方法(map,some…)等等


    高阶函数很简单,那接下来我们再看看函数柯里化是什么意思呢?

    函数柯里化

    基本概念

    • 通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数形式。

    通过这个概念可能大家还不是太明白,那么老套路了,咱们看看例子就会觉得非常简单了
    就像工具人用张三一样,既然是示例工具函数,咱们就用求和吧

    //普通函数求和
    function sum(x,y,z){
    	return (x + y + z);
    }
    console.log(sum(1,2,3)) //这是普通函数求和的方式
    
    //函数柯里化求和
    function sum(x){
    	return(y)=>{
    		return (z)=>{
    			return x + y + z
    	}
    		}
    }
    console.log(sum(1)(2)(3)) //通过不断调用返回函数的方式最后统一处理得到的值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    看了示例中的函数柯里化,我不知道大家会不会想起来一个函数中常会用得到的一个方法:递归
    也是通过不断的调用函数,最后再统一处理返回的函数值。

    最后

    最后这里我再做一个总结吧:
    高阶函数的定义就是看我们函数的接受和返回是不是一个函数函数柯里化主要看咱们的函数不断的返回调用,说白了就看看函数后面跟的小括号(当然,这种看法仅限于个人,欢迎批评指正),对于递归个人觉得也是属于函数柯里化一个明晃晃的示例。


    高阶函数以及函数的初始化可能对于刚入门的新手来说是一个懵懂的概念,甚至会以为是什么高级的东西。但是在稍微有了一些函数基础后再通过看一遍这篇博文,我相信你能很清楚这些东西都是非常简单的。那本次分享就先到这里了,谢谢大家

  • 相关阅读:
    【Log】为类中的所有日志打印添加前缀
    基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题
    AIX360-CEMExplainer: MNIST Example
    分布式事务
    Linux安装HBase
    Spring Boot异步请求处理框架
    Vue(3)
    分享物流跟踪提醒的设置方法
    .NET 8 的 green thread 异步模型被搁置了
    又一重磅利好来袭!Zebec Payroll 集成至 Nautilus Chain 主网
  • 原文地址:https://blog.csdn.net/weixin_51033461/article/details/126097644