柯里化理解与JS实现

什么是柯里化

严格来说一个函数只有一个参数,将具有多个参数的函数转换为单参数函数链的方式,这就是currying。后来演变成支持不定参数的函数链的形式流行起来。




// 在JS中可以常见这样调用方式
add(1)(2)(3) // 6
add() // 输出结果
> 6
// 或者
add(1)(2)(3)() === 6
// 或者
add(1)
add(2)
add(3)
add() === 6

柯里化的作用

  1. 闭包
  2. 延迟执行
  3. 参数复用

JS中实现柯里化

这是个柯里化的装饰器




function Currying(fn) {
  let args = [].slice.call(arguments,1);
  function g() {
    if(arguments.length > 0){
      args.push.apply(args, arguments)
      return g
    } else {
      return fn.apply(fn, args)
    }
  }
  return g
}

做个测试




// 定义一个求和函数
function add() {
  let count = 0
  if(arguments.length > 0) {
    for(let i = 0; i < arguments.length; i++){
      count += arguments[i]
    }
  }
  return count
}
// 测试
const _add = Currying(add)
  _add(1)
  _add(2)
  _add(3)()
// > 6

来源:https://segmentfault.com/a/1190000018585893

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值