“函数柯里化”常见使用场景记录
这里记录一下前端常用的“函数柯里化”使用场景。总的来说,柯里化常常用来进行函数的“延迟计算”与“参数复用”,甚至在某些场合需要动态创建函数的情况下,都可以使用函数的“柯里化”。
1、浏览器事件绑定函数:
属于延迟计算类型,第一次计算为判断浏览器支持类型,然后返回一个函数用来后续的计算过程。因此第一次的计算可以被复用,不需要再次调用。
var addEvent = (function() {
if (window.addEventListener) {
return function(el, sType, fn, capture) {
el.addEventListener(sType, function(e) {
fn.call(el, e);
}, (capture));
};
} else if (window.attachEvent) {
return function(el, sType, fn, capture) {
el.attachEvent("on" + sType, function(e) {
fn.call(el, e);
});
};
}
})();
2、增量处理函数:
属于参数复用和延迟计算的混合。fn
作为 Handler 会在最后接收到所有传入过的参数,然后做统一的处理。_args
由于闭包会保存所有已传入过的参数。
var currying = function(fn) {
var _args = [];
return function() {
if (arguments.length === 0) {
return fn.apply(this, _args);
}
Array.prototype.push.apply(_args, [].slice.call(arguments));
return arguments.callee;
}
};
评论 | Comments