在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。
/**
* 柯里化函数 & this绑定
* @param {Function} fn 原函数
* @param {Object} context this作用域
* @return {Function} 柯里化函数
*/
function bind(fn, context) {
var args = [].slice.call(arguments, 2);
return function() {
var innerArgs = [].slice.call(arguments);
return fn.apply(context, args.concat(innerArgs));
};
}
e.g. :
var eobj = {
msg: 'mouse click',
handler: function (name, e) {
console.info(this.msg + ':' + name + ':' + e.type);
}
};
var btn = document.getElementById('myBtn');
// 事件监听函数,会自动传递 eobj.handler 函数第二个参数(事件对象)
btn.onclick = bind(eobj.handler, eobj, 'myBtn');
// ------------------ 华丽的分割线 --------------------
// ES6已在函数原型上实现了柯里化方法
function Foo(a, b) {
return a + b;
}
var fn = Foo.bind(null, 2);
// 结果 = 5
fn(3);