函数柯里化(Currying)
Curring,又称部分求值,是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数并且返回结 果的新函数的技术。
一个curring的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另一个函数,刚 才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于 求值。
例子
普通
var monthlyCost=0;
var cost=function(money){
monthlyCost+=money;
};
cost(100);
cost(200);
cost(300);
alert(monthlyCost);`
柯里化
var costK=(function(){
var args=[];
return function(){
if(arguments.length==0){
var money=0;
for(var i=0;i<args.length;i++){
money+=args[i];
}
return money;
}else{
[].push.apply(args,arguments);
}
}
})();
costK(100);
costK(200,300);
costK(500);
console.log(costK());
面向切面编程
把一些跟核心业务逻辑模块无关的功能抽象出来,这些跟业务管的功能通常包括日志统计、安全控制、处理等。再通过“在动态织入”的方式掺入业务逻辑模块中。
这样做的好处:首先是可以保持业务逻辑模块的纯净和高内聚性,其次是可以很方便的复用日志统计等功能模块。
例子
Function.prototype.before=function(beforeFn){
var _self=this;
return function(){
beforeFn.apply(this,arguments);
_self.apply(this,arguments);
}
};
var func=function(obj){
console.log("我是"+obj.name);
}
func=func.before(function(obj){
console.log(obj.name=obj.name+"才怪");
});
func({
name:"HL"
});
说明
给一个函数添加一个在此函数执行之前的执行的函数,并返回一个组合好的函数。