美文网首页
JavaScript模式-Curry

JavaScript模式-Curry

作者: Rockiez | 来源:发表于2015-02-11 16:25 被阅读294次

    当执行部分应用时,并不会获得结果,相反会获得另一个函数。-《模式》p83
    Curry化允许我们把函数与传递给他的参数相结合,产生一个新的函数。-《精粹》p43


    function curry(){
        var slice = Array.prototype.slice,
            args = slice.apply(arguments),
            that=this;
        return function(){
            return that.apply(null,args.concat(slice.apply(arguments)));
        };
    }
    
    
    

    -《精粹》p43
    添加Function的原型方法。使得函数可以调用方法的形式使用curry

    缺点:会污染内置的原型。


    function curry(fn){
        var slice = Array.prototype.slice,
            args = slice.call(arguments, 1);
        return function() {
            return fn.apply(null,args.concat(slice.apply(arguments)));
        }
    }
    

    -《模式》p85
    将函数做为参数引入curry函数中。因为第一个参数为了留给了函数。slice方法从第二位开始。注意这里用的是call
    apply()方法的第一个参数为null或者undefined时,this指向全局对象。-《模式》p82

    call()方法被认为是apply()方法的语法糖,主要用在函数只有一个参数时。避免apply()函数创建只有一个参数的数组。-《模式》p82

    缺点:使用起来比较麻烦。


    arguments并不是一个数组,所以他没有concat方法。所以必须在两个argument上都应用数组的slice方法。这样产生拥有concat方法的数组。-《精粹》p43

    相关文章

      网友评论

          本文标题:JavaScript模式-Curry

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