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);