首页 > 代码库 > js curry化

js curry化

第一篇文竟然是curry开始……

柯里化是什么(抄的):柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数的函数,如果其他的参数是必要的,返回接受余下的参数且返回结果的新函数。

柯里化的作用感觉上就是把函数分成多段来完成,也许可以方便测试吧
但是至少,可以减少重复的参数

最简单的例子
function curry() {
    return function (a) {
        return function (b) {
            return a+b+5;

        }
    }
}

var test = curry();
console.log(test(1)(2));
console.log(test(3)(4));
通过curry化,原来需要传2个参数的函数变成1次传1个参数

例子2
function curry(){
    var arrayArgs = Array.prototype.slice.apply(arguments);
    return function(){
        //这个arguments是调用它的函数的arguments,在本例中即为test的arguments
        var wholeArgs = arrayArgs.concat(Array.prototype.slice.apply(arguments));
        return wholeArgs;
    }
}

var test = curry(‘fixed‘);
var result = test(‘new1‘,‘new2‘);
for(var i in result )
    console.log(result[i]);
var result = test(‘new3‘);
for(var i in result )
    console.log(result[i]);

这样的话,fixed只需要1次,之后使用的时候再也不用重复输入了
当然 可以让curry设置成接受高阶函数,这样会更灵活

还有一些作用,如延迟计算等,因为curry化有点难,似乎带来的效果也不会很好(似乎),所以先不写了

js curry化