函数柯里化的几个例子

本文探讨了函数柯里化在JavaScript中的应用,通过两个实例展示了如何创建已设置好参数的函数。实例1介绍了如何实现一个返回拼接字符串的柯里化函数,实例2则讲解了如何使用curryIt函数创建一系列接收单一参数的函数,最终调用预定义函数fn。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数柯里化

用于创建一个已经设置好了一个或或者多个参数的函数

通用写法如下:

function curry(fn){
  var args = Array.prototype.slice.call(arguments, 1);
  return function(){
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return fn.apply(null, finalArgs);
  }
}
function add(num1, num2){
 return num1 + num2;
}
var curriedAdd = curry(add, 5);
console.log(curriedAdd(3));

利用函数柯里化的实例1:

实现函数 functionFunction,调用之后满足如下条件: 1、返回值为一个函数 f 2、调用返回的函数
f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ‘, ’ 3、所有函数的参数数量为 1,且均为 String 类型

function functionFunction(str) {
      var args=Array.prototype.slice.call(arguments,0);
   var f=function(){
          var args_f=Array.prototype.slice.call(arguments,0);
          args_f=args.concat(args_f);
          return functionFunction.apply(this,args_f);
      }
      f.valueOf=function(){
          return args.join(", ");
      }
      f.toString=function(){
          return args.join(", ");
      }
      return f;
  }

利用函数柯里化的实例2:

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数

function curryIt(fn) {
     //获取fn参数的数量
     var n = fn.length;
     //声明一个数组args
     var args = [];
     //返回一个匿名函数
     return function(arg){
         //将curryIt后面括号中的参数放入数组
         args.push(arg);
         //如果args中的参数个数小于fn函数的参数个数,
         //则执行arguments.callee(其作用是引用当前正在执行的函数,这里是返回的当前匿名函数)。
         //否则,返回fn的调用结果
         if(args.length < n){
            return arguments.callee;
         }else return fn.apply("",args);
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值