什么是纯函数?

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里面。

副作用

  1. 更改文件系统
  2. 往数据库插入记录
  3. 发送一个 http 请求
  4. 打印/log
  5. DOM 查询

优点:可缓存性

采用memoize技术可以进行缓存。

var square = memoize(function(x){
    return x*x
})

square(4) //16
square(4) //从缓存中读取结果16

Kaso
8 声望1 粉丝

天才总是着手改变世界