纯函数概念:相同得输入永远会得到相同的输出,而且没有任何可观察的副作用
纯函数就是类似数学中的函数(用来描述输入和输出之间的关系),y=f(x)
lodash是一个纯函数的功能库,提供了对数组、数字、对象、字符串、函数等操作的一些方法
数组中的slice和splice分别是:纯函数和不纯的函数
slice返回数组中的指定部分,不会改变数组,相同的输入都会得到相同的输入
splice对数组进行操作返回该数组,会改变原数组
slice:
let array=[1,2,3,5,6,7,8]
//slice截取数组方法:数组.slice(a,b) 截取数组索引,a<=x<b的数组元素的值
console.log(array.slice(0,3))
console.log(array.slice(0,3))
console.log(array.slice(0,3))
相同输入相同输出
splice:
//splice每次执行完成都会修改原数组,比如第一次执行,会把数组已被截取的部分移除掉
//即数组变为了[5,6,7,8],再次执行则数组为[8],最后为[]
//因此多次执行相同的方法,输出结果不同,则该函数为不纯的函数
//splice
let array=[1,2,3,5,6,7,8]
//数组名.splice(a,b) a为开始截取元素的索引,b为往后截取多少个索引
console.log(array.splice(0,3))
console.log("原数组:"+array)
console.log(array.splice(0,3))
console.log("原数组:"+array)
console.log(array.splice(0,3))
console.log("原数组:"+array)
console.log(array.splice(0,3))
console.log("原数组:"+array)
//splice每次执行完成都会修改原数组,比如第一次执行,会把数组已被截取的部分移除掉
//即数组变为了[5,6,7,8],再次执行则数组为[8],最后为[]
//因此多次执行相同的方法,输出结果不同,则该函数为不纯的函数
纯函数:函数必须有输入(参数),和输出
简单的纯函数
//简单的纯函数
function getSum(a,b){
return a+b
}
console.log(getSum(1,2))
console.log(getSum(1,2))
console.log(getSum(1,2))
函数式编程不会保留计算中间的结果,所以变量是不可变的(无状态的)
比如getSum,可以通过传入参数,来输出一个结果,而函数内部的结果我们是无法获取到的,不会保存中间结果
我们可以把一个函数的执行结果交给另一个函数去处理
这边可以用到函数库,比如lodash