函数式编程(二)

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

let minimum = 21;

let checkAge = age => age >= minimum

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

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

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)。编码

高阶函数能够接收函数做为参数,或者返回一个函数结果,或者二者同时具有。
下面咱们看另外一个高阶函数code

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

咱们经过向makeAdder函数传递一个常量10来建立一个函数add10,add10将给任意值加上10。
这个makeAdder里面的匿名函数就是咱们常常被面试官用来压压惊的大名鼎鼎的闭包,这个行为很是的重要,由于若是没有它,可以返回函数的函数不是颇有用。
当一个函数被建立,其整个生命周期中都是能够访问在在其建立时做用域内的全部变量。只要有引用指向它该函数就会一直存在。生命周期

相关文章
相关标签/搜索