函数柯里化

54 阅读1分钟

函数柯里化

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

函数柯里化的作用

参数复用,就是起到固定参数的作用

比如:

function regTest(reg, txt){
    retrun reg.test(txt);
}
console.log(regTest(/\d+/g, '123'));
console.log(regTest(/\d+/g, 'test'));

上面的正则校验函数,如果正则一样,每次都需要重新传值。通过函数柯里化后,只需要传需要匹配的参数即可

通用型柯里化函数

/**
 * 通用型柯里化函数
 * @param {*} func 执行函数 
 * @param  {...any} args 接收参数
 * @returns 
 */
function curry(func, ...args) {
    if(args.length >= func.length){
        return func.apply(this, args);
    } else {
        const _curry = function(...restArgs) {
            const newArgs = [...args, ...restArgs];
            if(newArgs.length >= func.length){
                return func.apply(this, newArgs);
            } else {
                return _curry;
            }
        }
        return _curry;
    }
}