简单实现柯里化,使用ES6中的剩余参数和展开运算符(展开语法)巧妙实现柯里化

1.什么是柯里化?

柯里化(Currying):柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

通俗的讲:柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术

2.什么是剩余参数和展开运算符(展开语法)?

剩余参数:ES6的剩余参数专门用于收集末尾的所有参数,将其放置到一个形参数组中。

语法如下:

function (...形参名){}

例子:

function print(a, b, c, ...args) {
    console.log(a, b, c);     //1   2   3
    console.log(args);        //[4, 5, 6, 7]
}
print(1, 2, 3, 4, 5, 6, 7);

注意: 一个函数,仅能出现一个剩余参数,且剩余参数必须是最后一个参数

展开运算符:用代码说明一下吧

使用方式...要展开的东西数组或对象

//展开数组的每一项
const arr = [1, 2, 3, 4, 5];
console.log(...arr);    //  1  2  3  4  5
//浅层克隆对象
const obj = {
    name: '前端',
    sex: '男',
    age: 22
}
const newObj = { ...obj };
console.log(newObj);     //{name: "前端", sex: "男", age: 22}

3.ES6实现柯里化

//curry柯里化函数
function curry(func, ...args) {
    return function (...subArgs) {
        const allArgs = [...args, ...subArgs];
        if (allArgs.length >= func.length) {
        	//传入的实参数量>=func的形参数量,让func执行
            return func(...allArgs);
        } else {
        	//传入的实参数量<func的形参数量,继续
            return curry(func, ...allArgs);
        }
    }
}
//定义一个print函数,根据执行结果测试curry
function print(a, b, c, d, e) {
    return [a, b, c, d, e];
}
//直接传满参数执行print       
console.log(print(1, 2, 3, 4, 5));   //[1, 2, 3, 4, 5]

//curry处理
const print1 = curry(print, 1, 2);
const print2 = curry(print1, 3);
console.log(print2(4, 5));      //[1, 2, 3, 4, 5]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值