JS函数式编程
Posted 全栈技术者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS函数式编程相关的知识,希望对你有一定的参考价值。
和Lisp、Haskell不同,javascript并非函数式编程语言,但在javascript中可以像操控对象一样操控函数,也就是说可以在javascript中应用函数式编程技术。ES5中的数组方法(map、reduce)就可以非常适合用于函数式编程风格。
1. 使用函数处理数组
举一个最简单的例子,就是如求一个数列的平均数。如果使用非函数式编程风格的话,代码会是这样:
let data = [1,1,3,5,5]
let total = 0
for(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.length
console.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函数式编程的主要内容,如果未能解决你的问题,请参考以下文章