纯函数

原文链接:https://note.noxussj.top/?source=sifo

什么是纯函数?

雷同的输出永远会失去雷同的输入,而且没有任何可察看的副作用。纯函数就相似数学中的函数(用来形容输出和输入之间的关系)y=fn(x)

纯函数库

咱们平时用的 lodash 其实就是纯函数库。


纯函数的长处

可缓存(间接晋升性能)

也就是咱们平时说的函数缓存,因为纯函数对雷同的输出始终有雷同的后果,所以能够把纯函数的后果缓存起来,就没必要每次调用该函数都要从新执行一遍函数体的代码

可测试

纯函数让测试更不便,不受副作用的影响

并行处理

在多线程环境下并行操作共享的内存数据很可能会出现意外状况(纯函数内的数据都是独立的),纯函数不须要访问共享的内存数据,所以在并行环境下能够任意运行纯函数


根底案例

纯函数

雷同的输出始终失去雷同的输入

const array = [1, 2, 3, 4, 5]    console.log(array.slice(0, 3))    console.log(array.slice(0, 3))    console.log(array.slice(0, 3))    // [ 1, 2, 3 ]    // [ 1, 2, 3 ]    // [ 1, 2, 3 ]
不纯的函数

雷同的输出失去的输入却不雷同

const array = [1, 2, 3, 4, 5]    console.log(array.splice(0, 3))    console.log(array.splice(0, 3))    console.log(array.splice(0, 3))    // [ 1, 2, 3 ]    // [ 4, 5 ]    // []
函数缓存

每次调用函数,并且传入参数雷同时,函数体内代码不会被执行,间接返回上一次输入的后果

    const lodash = require('lodash')    function getArea(r) {        console.log(r)        return Math.PI * r * r    }    let getAreaWithMemory = lodash.memoize(getArea) // 创立一个缓存函数    console.log(getAreaWithMemory(4))    console.log(getAreaWithMemory(4))    console.log(getAreaWithMemory(4))    console.log(getAreaWithMemory(5))    // 4    // 50.26548245743669    // 50.26548245743669    // 50.26548245743669    // 5    // 78.53981633974483

原文链接:https://note.noxussj.top/?source=sifo