javaScript函数柯里化

1.什么是Currying?

  考虑一个三维空间方程 F(x, y, z)= 0,如果我们限定z = 0,于是得到 F(x, y, 0) = 0 记为 F’(x, y)。

  这里F’显然是一个新的方程式,它代表三维空间曲线F(x, y, z)在z = 0 平面上的两维投影。

  记y = f(x, z), 令z = 0, 得到 y = f(x, 0),记为 y= f’(x),我们说函数f’是f的一个Currying解。

2.看个小例子

 1 var foo = function(x) {
 2   return function(y) {
 3     return x + y;
 4   }
 5 }
 6 
 7 //有两种调用方法
 8 var a = foo(3);
 9 var b = a(4);
10 
11 var c = foo(3)(4);

3.柯里化:把接受多个参数的函数变换成接受一个单一参数的函数,并且返回一个新函数,这个新函数能够接受原函数的参数。

 1 function curry(fn) {
 2 
 3     //获取第一个参数后的所有参数
 4     var args = Array.prototype.slice.call(arguments, 1);
 5 
 6     return function() {
 7         //获取传给匿名函数的参数
 8         var innerArgs = Array.prototype.slice.call(arguments);
 9 
10         //已输入的参数和此次输入的参数构成参数调用fn
11         var finalArgs = args.concat(innerArgs);
12          retrun   fn.apply(null, finalArgs);
13     };
14 }
 1 function curry(fn) {
 2 
 3     //获取第一个参数后的所有参数
 4     var args = Array.prototype.slice.call(arguments, 1);
 5 
 6     return function() {
 7         //获取传给匿名函数的参数 var innerArgs = arguments;?可以不?
 8         var innerArgs = Array.prototype.slice.call(arguments);
 9         
10         //已输入的参数和此次输入的参数构成参数调用fn
11         var finalArgs = args.concat(innerArgs);
12          retrun   fn.apply(null, finalArgs);
13     };
14 }

4.应用:待续

原文地址:https://www.cnblogs.com/yuyutianxia/p/3264781.html