柯里化函数

在计算机科学中,柯里化(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);

推荐阅读更多精彩内容