纯函数以及副作用的理解

//纯函数:相同的输入总是得到相同的输出,并且没有任何可观察的副作用

//副作用:副作用让一个函数变的不纯,纯函数的根据是相同的输入返回相同的输出,"如果函数依赖外部的状态"就无法保证输出相同,就会带来副作用.
//不纯(副作用)
let mini = 18
function checkAge (age){
    return age >=mini
}
//纯的(有硬编码)
function checkAge (age){
    let mini = 18
    return age >=mini
}
//副作用来源:
//    配置文件
//    数据库
//    用户输入

//slice/splice 纯函数/不纯的函数
let arr = [1,2,3,4,5,6,7]

//下标0到下标3,不包含3
console.log(arr.slice(0,3));// [ 1, 2, 3 ]
console.log(arr.slice(0,3));// [ 1, 2, 3 ]
console.log(arr.slice(0,3));// [ 1, 2, 3 ]

//下标0,三个
console.log(arr.splice(0,3));// [ 1, 2, 3 ]
console.log(arr.splice(0,3));// [ 4, 5, 6 ]
console.log(arr.splice(0,3));// [ 7 ]

//纯函数
function add(num1,num2){
    return num1 + num2
}

//lodash
const _ = require('lodash')
//记忆函数 memoize
function getArea(r){
    console.log(r);
    return Math.PI * r * r
}

let r = _.memoize(getArea)

console.log(r(4));
console.log(r(4));
console.log(r(4));
/* 
4
50.26548245743669
50.26548245743669
50.26548245743669
*/

//模拟memoize
function memoize(f){
    let cache = {}
    return function (){
        let key = JSON.stringify(arguments)
        cache[key] = cache[key] || f.apply(f,arguments)
        return cache[key]
    }
}

let r = memoize(getArea)

console.log(r(4));
console.log(r(4));
console.log(r(4));

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值