lodash里面 _.flowRight()方法与_.curry() 结合后的一些自推

在执行lodash里面的 .flowRight()方法 里调用.curry()的方法时 对入参顺序感觉奇怪

const split = _.curry((sep, str) => _.split(str, sep))
//省略其他方法 只针对split 
const f = _.flowRight(join('-'), trace('map 之后'), map(_.toLower), trace('split 之后'), split(' '))

1.对这个执行顺序感觉奇怪 调用_.curry方法 影响到了执行 sep和str的顺序会影响到结果,

const split = _.curry((sep, str) => _.split(str, sep))

2.于是通过相传的_.curry 逻辑将输出放入cuury方法中
curry对入参的执行顺序 是按顺序取入参 直到方法接收完全不入参

function curry (func) {
  return function curriedFn(...args) {
    console.log(args);
    console.log("curriedFn");
    // 判断实参和形参的个数
    if (args.length < func.length) {
      return function () {
        return curriedFn(...args.concat(Array.from(arguments)))
      }
    }
    return func(...args)
  }
}
const split1 = curry((sep, str) => {
  console.log("stris " +str);
  return _.split(str, sep)
})

const f = _.flowRight( split1(' '))
console.log(f('NEVER SAY DIE'))

3.执行顺序如下
是否表明flowRight的执行顺序是先取了方法里的参数 最后调用f的参数
[ ’ ’ ]
curriedFn
[ ’ ', ‘NEVER SAY DIE’ ]
/curriedFn

4.再次用简单的多数相加方法证明

const add1 = curry((a,b,c) => {
  return a+b+c
})
const f2 = _.flowRight( add1("2","3"))
console.log(f2("1"))

5.执行顺序果然如下
[ ‘2’, ‘3’ ]
curriedFn
[ ‘2’, ‘3’, ‘1’ ]
curriedFn
所以认为f2(“1”)可以视为_.flowRight( add1(“2”,“3”)(“1”))
即最后调用的总在后面
所以 const split = _.curry((sep, str) => _.split(str, sep)) 当确定了分隔符号的时候 str确实应该放在后面

const f3 = _.flowRight( add1("3"))
console.log(f3("1","2"))

同理可得
[ ‘3’ ]
curriedFn
[ ‘3’, ‘1’, ‘2’ ]
curriedFn

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值