JS 函数式编程、闭包、柯里化、高阶函数

函数式编程,倾向于把程序进行拆分,并抽象成多个函数组装回去。

闭包

闭包指那些引用另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。

例一

例二

内部定义的函数,会将外部函数的活动对象添加到内部函数的作用域中,当外部函数调用完成后,外部函数的作用域链会进行销毁,但活动对象仍然会保留在内存中,也就是内部函数会一直保持对外部函数的活动对象进行引用,造成内存泄漏。

闭包内存泄漏解决方案:

解决对函数的引用,释放内存。

柯里化

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。

例一

例二

/**
* 需求:
* 1. 筛选出为0的数据
* 2. 对数据进行乘n
* 3. 对数据进行排序
*/

个人观点,柯里化优化了编程的过程,利用函数式编程的思想,将数据处理进行单独区分,确保在不确定性需求的情况下,提升了代码的可复用性以及优化了后期维护的成本。

附:新增需求,对数据进行去重处理

高阶函数

⾼阶函数(higher-order function)就是操作函数的函数,它接收⼀个或多个函数作为参数,并返回⼀个新函数。

例一

例二

例二是一个经典的缓存函数,这种缓存技巧叫做“记忆”(memorization)。

memorize()函数创建⼀个新的对象,这个对象被当做缓存(的宿主)并赋值给⼀个局部变量,因此对于返回的函数来说它是私有的 (在闭包中)。所返回的函数将它的实参数组转换成字符串,并将字符串⽤做缓存对象的属性名。如果在缓存中存在这个值,则直接返回它。否则,就调⽤既定的函数对实参进⾏计算,将计算结果缓存起来并返回。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值