函数柯里化是指:把一个多参数的函数,转化为单参数函数
// 非柯里化
function add(x, y) {
return x + y;
}
add(1, 2) === 3; // true
// 柯里化
function addX(y) {
return function(x) {
return x + y;
};
}
addX(2)(1) == 3; // true
函数柯里化的作用:
-
参数复用:所谓参数复用,就是利用闭包的原理,让我们前面传输过来的参数不要被释放掉
-
提前确认:这一特性经常是用来对浏览器的兼容性做出一些判断并初始化api,比如说我们目前用来监听事件大部分情况是使用addEventListener来实现的,但是一些较久的浏览器并不支持该方法,所以在使用之前,我们可以先做一次判断,之后便可以省略这个步骤了 。
var on = (function() { if (document.addEventListener) { return function(element, event, handler) { if (element && event && handler) { element.addEventListener(event, handler, false); } }; } else { return function(element, event, handler) { if (element && event && handler) { element.attachEvent('on' + event, handler); } }; } })();
-
延迟运行:js中的bind这个方法,用到的就是柯里化的这个特征 。
Function.prototype.bind = function (context) { var _this = this var args = Array.prototype.slice.call(arguments, 1) return function() { return _this.apply(context, args) } }