JS函数式编程

Posted 全栈技术者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS函数式编程相关的知识,希望对你有一定的参考价值。


和Lisp、Haskell不同,javascript并非函数式编程语言,但在javascript中可以像操控对象一样操控函数,也就是说可以在javascript中应用函数式编程技术。ES5中的数组方法(map、reduce)就可以非常适合用于函数式编程风格。

JS函数式编程

1. 使用函数处理数组

举一个最简单的例子,就是如求一个数列的平均数。如果使用非函数式编程风格的话,代码会是这样:

let data = [1,1,3,5,5]let total = 0for(let i = 0; i < data.length; i++){  total += data[i]}console.log(`平均数为:${total/data.length}`)

我们可以使用reduce来完成同样的功能,但是用的函数式编程风格,代码如下:

let data = [1,1,3,5,5]let mean = data.reduce((x, y) => x + y) / data.lengthconsole.log(`平均数为:${mean}`)

2.高阶函数

所谓高阶函数(higher-order function)就是操作函数的函数,他接受一个或多个函数作为参数,并返回一个新函数,来看这个例子:

/*  这个高阶函数返回一个新的函数,这个新函数将它的参数传给f()  并返回f的返回值的逻辑非 */function not(f){  return function(){    let res = f.apply(this,arguments)    return !res  }}

3. 缓存能力

在函数式编程这种缓存技巧成为记忆 ,下面通过代码展示一下缓存能力,

function memorized(f){  let cache = {}  return function(){    let key =       arguments.length + Array.prototype.join.call(arguments",")      if(key in cache) return cache[key]      else return cache[key] = f.apply(this, arguments)  }}

memorized()函数创建一个新的对象,这个对象被当做缓存并赋值各一个局部变量,因此对于返回的函数来说他是私有的。所犯贵的函数将他的是参数组转换为字符串,并将它缓存起来。如果缓存中包含则直接返回,否则则计算后缓存并返回。


以上是关于JS函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

代码简化改进秘籍,JS函数式编程技巧

函数式编程/命令式编程

《On Java 8》中文版 第十三章 函数式编程

JS函数式编程

视频从Cycle.js谈函数式与响应式编程

js函数式编程基础:高阶函数柯理化函数合成Loadash