纯函数是指不依赖于且不改变它作用域之外的变量状态的函数。纯函数的返回值只由它调用时的参数决定,它的执行不依赖于系统的状态(执行上下文)。相同的输入参数,一定会得到相同的输出,也就是内部不含有会影响输出的随机变量。不属于纯函数的特点:
更改文件系统
往数据库插入记录
发送一个 http 请求
可变数据
打印/log
获取用户输入
DOM 查询
访问系统状态
纯函数的作用:
可靠性:函数返回永远和预期一致
可缓存性:因为只要输入一样输出一定一样,因此可将输入作为 key,输出作为值,使用对象缓存已经计算的结果
可移植性:因为没有外部依赖,所以移植到任何环境都可正确运行
可测试性:方便针对函数做单元测试
可并行性:对一些复杂计算,可以并行计算(例如使用 nodejs 多个子进程同时并行计算多个任务,提高计算速度)
应用场景:
工具函数最好使用纯函数
多平台使用的代码(nodejs、浏览器、微信小程序、native 客户端等)
相对独立的功能
var a = 1; // 非纯函数 function sum(b) { return a + b; } // 非纯函数 function sum(b) { a = 2; return b; } // 非纯函数 function sum(b) { return b + Math.random(); } // 纯函数 function sum (b, c) { return b + c; }