函数式编程(二)

上篇文章引见了纯函数,相信你已理解了纯函数的观点。下面我们接着看一段代码

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内里的匿名函数就是我们常常被面试官用来压压惊的赫赫有名的闭包,这个行动异常的主要,由于假如没有它,可以返回函数的函数不是很有效。
当一个函数被建立,其全部生命周期中都是可以接见在在其建立时作用域内的一切变量。只需有援用指向它该函数就会一向存在。

    原文作者:林小新
    原文地址: https://segmentfault.com/a/1190000009323825
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞