最近接到一个电话面试,他在里面问到一个问题,在js中什么是纯函数,我一听懵了,之前没听说过纯函数这个概念,之前赶紧查缺补漏了一下,吸收消化后,理出的一点点见解,记于此处。
纯函数
1.什么是纯函数?
纯函数是指一个函数的结果依赖他所传入的参数,如果参数不变,返回的结果也就不变,并且这个函数在执行过程中不会产生副作用,那么这个函数就是纯函数。
2.要点:
a.函数的结果只依赖它传入的参数。
b.函数执行并没有副作用。
举例说明:
let a = 5;
funcion add(x){
return a + x;
}
上例中add函数就不是一个纯函数,因为他返回结果依赖于变量a和x,a是全局变量,x是add函数的参数,故它不满足只函数结果只依赖函数参数这个条件。
function addNum(x,y){
return x+y
}
在上面这个例子中,addNum的结只依赖于参数x,y。所以addNum可以视为一个纯函数。
const eg = (obj,x)=>{
obj.n = 2;
return obj.n+x
}
const object = {n:1}
eg(object,2) // 4
object.n // 2
上例中在函数内部添加了obj.n = 2,函数执行钱object.n是1;函数执行后obect.n = 2,函数执行过程中对外部的obect产生的影响,所以他是不纯的。
总结
1.不能修改传入的参数
2.不能修改函数作用域外的变量
3.如果参数相同,返回值也一定相同
函数的结果只依赖于它的参数,并且执行过程中不会产生副作用的函数,我们称它为纯函数。
利弊:为什么要煞费苦心地构建纯函数?因为纯函数非常“靠谱”,执行一个纯函数你不用担心它会干什么坏事,它不会产生不可预料的行为,也不会对外部产生影响。不管何时何地,你给它什么它就会乖乖地吐出什么。如果你的应用程序大多数函数都是由纯函数组成,那么你的程序测试、调试起来会非常方便。