函数柯里化传入不同参数得到不同返回
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); }; }