美文网首页
柯里化函数

柯里化函数

作者: rocneal | 来源:发表于2016-10-12 01:04 被阅读0次

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

    相关文章

      网友评论

          本文标题:柯里化函数

          本文链接:https://www.haomeiwen.com/subject/cbzbyttx.html