博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数式编程(二)
阅读量:6007 次
发布时间:2019-06-20

本文共 910 字,大约阅读时间需要 3 分钟。

上篇文章介绍了,相信你已经理解了纯函数的概念。下面我们接着看一段代码

let minimum = 21;let checkAge = age => age >= minimum// 纯的let checkAge = age => {  let minimum = 21;  return age >= minimum;};

纯函数把关键字18硬编码在函数内部,扩展性差,那我们如何解决呢?

let checkAge  =(minimum, age) => age >= minimum

机智如你肯定会想到通过一个参数将通过传参数将minimum传递进去,很好,这样很机智的解决了问题,可是如果情况是这样的呢?

let minimum = x => x * 2;let checkAge = age => age >= minimum(2)

我们怎么把这段代码改成纯函数,且不是硬编码的呢?

我们可以将一个函数作为参数传递。

高阶函数

在函数式语言中,函数是这个语言中的一等公民。通俗来讲,函数仅仅是另一种值而已,他与村口的"刘能" "赵四"这类js其他数据类型一样,把它们存在数组里,当作参数传递,赋值给变量...等等。

let checkAge =(age, minimum) => age >= minimum(2)

我们的新函数就称为高阶函数(Higher-order Function)。

高阶函数可以接收函数作为参数,或者返回一个函数结果,或者两者同时具备。

下面我们看另一个高阶函数

let makeAdder = x => (y => x + y);let add10 = makeAdder(10);add10(10); //20

我们通过向makeAdder函数传递一个常量10来创建一个函数add10,add10将给任意值加上10。

这个makeAdder里面的匿名函数就是我们经常被面试官用来压压惊的大名鼎鼎的闭包,这个行为非常的重要,因为如果没有它,能够返回函数的函数不是很有用。
当一个函数被创建,其整个生命周期中都是可以访问在在其创建时作用域内的所有变量。只要有引用指向它该函数就会一直存在。

转载地址:http://espmx.baihongyu.com/

你可能感兴趣的文章
从零搭建mongo分片集群的简洁方法
查看>>
J2EE环境配置与工具使用
查看>>
bzoj3684: 大朋友和多叉树(拉格朗日反演+多项式全家桶)
查看>>
C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
查看>>
【经典算法】第四回:希尔排序
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
烂泥:【解决】NFS服务器使用showmount –e命令报错
查看>>
烂泥:LVM学习之逻辑卷LV及卷组扩容VG
查看>>
9. ZooKeeper之搭建单机模式。
查看>>
紧急维护,阿里云服务器抢修记
查看>>
数字货币相关
查看>>
payload和formData有什么不同?
查看>>
131016
查看>>
第六次作业
查看>>
python 自动化测试HTTP接口
查看>>
题解——loj6280 数列分块入门4 (分块)
查看>>
Nginx配置文件nginx.conf详解
查看>>
Ubuntu下实现socks代理转http代理
查看>>
使用PL/SQL能查询oracle中数据,在for update 语句中一直卡住
查看>>