var add =function(a,b){ return a+b; }
簡答粗暴,我喜歡app
function createMathOperation(fn){ return function(...arg){ return fn(arg) } } var add=createMathOperation((a,b)=>a+b)
高階函數應用,典型純函數式函數
funtion _cuurry1(fn){ return function f1(a) { if (arguments.length === 0 || _isPlaceholder(a)) { return f1; } else { return fn.apply(this, arguments); } } } function _curry2(fn) { return function f2(a, b) { switch (arguments.length) { case 0: return f2; case 1: return _isPlaceholder(a) ? f2 : _curry1(function(_b) { return fn(a, _b); }); default: return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b); }) : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b); }) : fn(a, b); } }; }; var add=_curry2((a,b)=>a+b)
華麗的柯麗化應用,往死裏面套,而後使用起來,缺沒那麼Haithis
add(1,2) ==> 3 add(1)(2) ==> 3 add(1,2)(3) ==> 歇菜 add(1)(2)(3) ==> 歇菜
若是非要實現 add(1,2)(3)(4,5) 咋辦?code
function curray(fn){ return function(){ var args=[].slice.call(arguments); var func=function(){ [].push.apply(args,[].slice.call(arguments)) return func; } func.toString=function(){ return args.reduce(fn) } return func } } var add=curray(function(a,b){return a+b;}) var a=add(1,2,3)(4)(5);