理解Javascript中的纯函数

最近接到一个电话面试,他在里面问到一个问题,在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.如果参数相同,返回值也一定相同

函数的结果只依赖于它的参数,并且执行过程中不会产生副作用的函数,我们称它为纯函数。

利弊:为什么要煞费苦心地构建纯函数?因为纯函数非常“靠谱”,执行一个纯函数你不用担心它会干什么坏事,它不会产生不可预料的行为,也不会对外部产生影响。不管何时何地,你给它什么它就会乖乖地吐出什么。如果你的应用程序大多数函数都是由纯函数组成,那么你的程序测试、调试起来会非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值