函数柯里化的几个例子

来源:互联网 发布:铁血战士玩具淘宝 编辑:程序博客网 时间:2024/05/16 17:16

函数柯里化

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

通用写法如下:

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);     } }
原创粉丝点击