三行代码实现 JS 柯里化

本文探讨了柯里化与部分应用的区别,并批评了一些文章中错误的柯里化实现。作者提供了自己仅三行代码的柯里化实现,并建议在深入研究高级概念前,应扎实掌握递归等基础概念。
摘要由CSDN通过智能技术生成

最近有看到一些柯里化的文章,怎么说呢,感觉很奇怪。一篇是阿里云的译文,文章末尾给出了这样一个 “curry”:

function curry(fn, ...args) {
    return (..._arg) => {
        return fn(...args, ..._arg);
    }
}

作者前面明明例举了柯里化和部分应用的区别,结果最后说我们实现下柯里化吧,然后写了个部分应用……太假了,我忍不住评论了一下:
在这里插入图片描述
然后今天看到我们组欢哥的文章,说实话看了一下开头这段代码我就不太有耐心看下面具体的分析了:

// 定义占位符
var _ = '_';

function magician3 (targetfn, ...preset) {
  var numOfArgs = targetfn.length;
  var nextPos = 0; // 下一个有效输入位置的索引,可以是'_',也可以是preset的结尾

  // 查看是否有足够的有效参数
  if (preset.filter(arg=> arg !== _).length === numOfArgs) {
    return targetfn.apply(null, preset);
  } else {
    // 返回'helper'函数
    return function (...added) {
      // 循环并将added参数添加到preset参数
      while(added.length > 0) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值