什么是纯函数?
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