柯里化(Curing)

柯里化:把接受多个参数的函数变换成接受单个参数的函数,并且返回准备接受余下参数,还能返回结果的一种技术。

 1 function currying(fn){
 2     var args = Array.prototype.slice.call(arguments, 1);
 3     
 4     return function(){
 5         var innerArgs = Array.prototype.slice.call(arguments);
 6         var finnalArgs = args.concat(innerArgs);
 7         
 8         return fn.apply(null, finnalArgs);
 9     }
10     
11 }
12 
13 function add(num1, num2){
14     return num1 + num2;
15 }
16 
17 var curriedAdd = currying(add, 2);
18 console.log(curriedAdd(3)); //5

使用柯里化,我们实现一个数字累加的例子:

 1 function currying(fn) {
 2     var _store = [];
 3 
 4     return function () {
 5         if (!arguments.length) {
 6             return fn.apply(null, _store);
 7         } else {
 8             _store = _store.concat(Array.prototype.slice.call(arguments));
 9         }
10     }
11 
12 }
13 
14 function sum() {
15     var total = 0;
16     for (var i = 0, len = arguments.length; i < len; i++) {
17         total += arguments[i];
18     }
19     return total;
20 }
21 
22 var addNum = currying(sum);
23 
24 addNum(1);
25 addNum(2);
26 addNum(3, 4);
27
28 console.log(addNum()); //10

在多参数的函数中,如果我们想固定其中的一些参数,我们就可以使用函数的柯里化特性。预先将函数的某些参数传入,得到一个简单的函数,预先传入的参数则被保存在闭包中。

 

posted @ 2014-09-01 12:56  周文洪  阅读(347)  评论(0编辑  收藏  举报