关于javascript:112科里化

科里化:
当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数当前永远不变)
而后返回一个新的函数接管残余的参数,返回后果。
编程最后学C语言,面相过程编程,起初接触C++,JAVA,OC的面相对象编程,对函数式编程还是一下子转不过去。这方面后续须要在工作中缓缓转变过去。

举个栗子:
解决硬编码的问题,纯函数的写法不够灵便。

// pure funciton
function checkAge(age){
    let min = 18;
    return age >= min;
}

function checkAge (min,age){
    return age >= min;
}

科里化写法,函数粒度变小,更加扁平化。

function checkAge(min) {
    return function (age) {
        return age >= min;
    }
}

//es6写法
let checkAge =min => (age => age >= min);
// test
let checkAge18 = checkAge(18);
checkAge18(24);

lodash中有curry办法能够实现科里化
性能:创立一个函数,该函数接管一个或多个 func 的参数,如果 func 所须要的参数都被提
供则执行 func 并返回执行的后果。否则持续返回该函数并期待接管残余的参数。
参数:须要柯里化的函数

const _ = require('lodash')
// 要柯里化的函数
function getSum (a, b, c) {
return a + b + c
} /
/ 柯里化后的函数
let curried = _.curry(getSum)
// 测试
curried(1, 2, 3)
curried(1)(2)(3)
curried(1, 2)(3)

curry函数模仿实现

function mycurry (func) {
    return function curriedFn(args){
        if(args.length < func.length){
            return function () {
                return curriedFn(...args.concat(Array.from(arguments)));
            }
        }   
        // 参数个数一样,间接返回func
        return func(...args);     
    }
}

柯里化能够让咱们给一个函数传递较少的参数失去一个曾经记住了某些固定参数的新函数,这是一种对函数参数的’缓存’
让函数变的更灵便,让函数的粒度更小,能够把多元函数转换成一元函数,能够组合应用函数产生弱小的性能

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理