Add 方法
undersore
var add =function(a,b){
return a+b;
}
简答粗暴,我喜欢
lodash
function createMathOperation(fn){
return function(...arg){
return fn(arg)
}
}
var add=createMathOperation((a,b)=>a+b)
高阶函数应用,典型纯函数式
ramda
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)
华丽的柯丽化应用,往死里面套,然后使用起来,缺没那么Hai
add(1,2) ==> 3
add(1)(2) ==> 3
add(1,2)(3) ==> 歇菜
add(1)(2)(3) ==> 歇菜
未来?
如果非要实现 add(1,2)(3)(4,5) 咋办?
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);