函数柯里化

函数柯里化传入不同参数得到不同返回

var greetCurried = function(greeting) {
  return function(separator) {
    return function(emphasis) {
      return function(name) {
        console.log(greeting + separator + name + emphasis);
      };
    };
  };
};

使用:

var sayHello = greetDeeplyCurried("Hello")(", ");
sayHello(".")("Richard"); //"Hello, Richard."
sayHello(".")("lann"); //"Hello, lann."
var sayHi = greetDeeplyCurried("Hi")(", ")("!");
sayHi(".")("Richard"); //"Hi, Richard!"
sayHi(".")("lann"); //"Hi, lann!"

创建柯里化函数方式:

function curry(fn){
    var args=Array.prototype.slice.call(arguments,1);
    return function(){
        var innerArgs=Array.prototype.slice.call(arguments);
        var finalArgs=agrs.concat(innerArgs);
        return fn.apply(null,finalArgs);
    };
}

使用:

function add(num1,num2){
    return num1+num2;
}
var curriedAdd=curry(add,4,67);
console.log(curriedAdd());//71

bind()函数将函数柯里化作为函数绑定的一部分:

function bind(fn,context){//接受函数和一个object对象
    var args=Array.prototype.slice.call(arguments,2);
    return function(){
        var innerArgs=Array.prototype.slice.call(arguments);
        var finalArgs=args.concat(innerArgs);
        return fn.apply(context,finalArgs);
    };
}
原文地址:https://www.cnblogs.com/rlann/p/6358953.html