柯里化
var add = function(a, b){
return a + b;
};
add.curry = function(){
var slice = Array.prototype.slice, //[].slice
that = this,
args = slice.apply(arguments);
return function(){
return that.apply(null,args.concat(slice.apply(arguments)));
};
};
var add1 = add.curry(1);
alert(add1(6));
柯里化就是把多参数的函数转换为一系列单参数函数并进行调用的技术。在这里add1是把1传递给add.cuury方法后创建的一个函数,在这个函数中在传入6这个参数,再执行add方法。
使用示例:摘自论坛
在AJAX应用中,根据不同的地址跟返回不同的数据,然后做出不同的处理,这里如果分布判断的话,代码就很难耦合。使用柯里化,很容易维护代码。
//update会返回一个函数,这个函数可以设置id属性为item的web元素的内容
function update(item){
return function(text){
$("div#"+item).html(text);
}
}
//Ajax请求,当成功是调用参数callback
function refresh(url, callback){
var params = {
type : "echo",
data : ""
};
$.ajax({
type:"post",
url:url,
cache:false,
async:true,
dataType:"json",
data:params,
//当异步请求成功时调用
success: function(data, status){
callback(data);
},
//当请求出现错误时调用
error: function(err){
alert("error : "+err);
}
});
}
refresh("action.do?target=news", update("newsPanel"));
refresh("action.do?target=articles", update("articlePanel"));
refresh("action.do?target=pictures", update("picturePanel"));
其中,update函数即为柯里化的一个实例,它会返回一个函数,即:
update("newsPanel") = function(text){
$("div#newsPanel").html(text);
}