什么是纯函数?
1. 唯一结果
let xs = [1,2,3,4,5]
// 纯函数
xs.slice(0,3) //[1,2,3]
xs.slice(0,3) //[1,2,3]
xs.slice(0,3) //[1,2,3]
// 不纯函数
xs.splice(0,3) //[1,2,3]
xs.splice(0,3) //[4,5]
xs.splice(0,3) //[]
将一个函数反复执行,其中的值已经被改变了,从而影响后面的函数操作。一个纯函数是无论什么输入,都只对应输出一个唯一值。
2. 不接受外部状态
var min = 21;
// 不纯函数
var ckeck = function(age){
return age >= min;
}
// 纯函数
var check = function(age){
var min = 21;
return age >= min;
}
3. 更清晰的表达
一个优秀的纯函数应该具有可移植性/自文档化
,即通过输入内容,就可以看出函数的意图。
// 不纯的
var signUp = function(attrs){
一些副作用操作
}
// 纯的
var signUp = function(Db, Email, attrs){
return function(){
...一些副作用操作
}
}
优点:没有副作用
副作用指,在进行操作的时候,更改了原有数据的形态,从而影响了数据的纯洁性,对于此类数据应该放置在return
里面。
副作用
- 更改文件系统
- 往数据库插入记录
- 发送一个 http 请求
- 打印/log
- DOM 查询
优点:可缓存性
采用memoize技术可以进行缓存。
var square = memoize(function(x){
return x*x
})
square(4) //16
square(4) //从缓存中读取结果16
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。