/** * curry * * var curried = curry(function(a, b, c) { * console.log(a+b+c); * }); * * * curried(2)(2)(2); // => 6 * curried(2,2)(2); // => 6 * curried(2,2,2); // => 6 * */ function curry(fn) { var totalArgsLength = fn.length; var params = []; function genCurried() { var args = [].slice.call(arguments); params = params.concat(args); if (params.length < totalArgsLength) { return genCurried; } else { return fn.apply(this, params); } } return genCurried; }