JavaScript 柯里化
定义: 柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
好像不是很好理解,我的理解是,柯里化其实是通过闭包的形式,返回函数,再用返回的函数去接受单一参数,如果需要,继续返回函数,去接受参数的的高级函数技术。过程中,柯里化可能要承担部分功能的实现。通过利用闭包缓存的方法。例如cuuryAdd中的s_arr数组就是通过闭包缓存到内存中,因为add函数引用了闭包,s_arr没有被释放。
就是 通过柯里化得到函数f,执行f(a)(b)(c)(d).....的形式
常见的bind的实现方式就是柯里化的典型例子。
实例1:柯里化的作用-----> 延迟计算/运行。
var curryAdd = function(fn){
var s_arr = [];
return function(){
if(!arguments.length){
return fn.apply(null,s_arr);
}
else{
s_arr = s_arr.concat([].slice.call(arguments));
return arguments.callee;
}
}
};
var total = 0;
var add = curryAdd(function(){
if(!arguments.length) return
for(var i = 0,len = arguments.length; i < len; i++){
total += arguments[i];
}
return total
})
add(9)(8)()
实例2:柯里化的作用----> 提前返回
var addEvent = (function(){
if(window.addEventListener){
return function(el,type,fn,capture){
el.addEventListener(type,fn,capture);
}
}
else{
return function(el,type,fn,capture){
el.attachEvent("on"+type,fn)
}
}
})()
addEvent(el,"click",function(){
console.log(this.id);
},false)
初始addEvent的执行其实值实现了部分的应用(只有一次的if...else if...判定),而剩余的参数应用都是其返回函数实现的,典型的柯里化。
浙公网安备 33010602011771号