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.应用:待续