var add = function(a, b) {    return a + b;};Function.method('curry', function() {
    var slice = Array.prototype.slice,
        args = slice.apply(arguments),
        that = this;
    return function() {
        return that.apply(null, args.concat(slice.apply(arguments)));
    };
});
    var add1 = add.curry(1);
    add1(6); //结果是7
结果是7,什么意思呀,看不懂

解决方案 »

  1.   

    哦,忘了说了,这是书上的例子,Function.method这个是之前定义的,就是给函数加方法
    这里是给所有函数加'curry' method,第二个参数就是添加的函数体
      

  2.   

    要看懂这段代码,首先要明确以下几点
    1.slice函数
    此方法在数组的prototype上,可提取字符串的某个部分,并以新的字符串返回被提取的部分。如果没有参数,则相当于复制一个数组。(貌似两维数组无法复制)
    2.apply函数
    此方法在Function的prototype上,用于动态执行某个函数。他有两个参数,第一个用于指定执行函数的对象,第二个是数组类型,用于指定函数的参数
    比如
    function add(a, b) {
       return a + b;
    }
    alert(add.apply(null, [1, 2]));
    将会返回3好了,回到你的代码
    // 定义函数
    var add = function(a, b) {    return a + b;};Function.method('curry', function() {
        // 得到slice函数
        var slice = Array.prototype.slice,
            // 复制curry的参数数组
            args = slice.apply(arguments),
            // 得到function对象的引用(这里指的是add)
            that = this;
        return function() {
            // slice.apply(arguments)得到add1的参数数组
            // args.concat(slice.apply(arguments)); 将add和add1的参数组成一个新的数组([1, 6])
            // that.apply(null, args.concat(slice.apply(arguments))) 1+6
            return that.apply(null, args.concat(slice.apply(arguments)));
        };
    });    // 这段执行到return了一个function
        var add1 = add.curry(1);
        // 这句话执行了function里面的内容
        add1(6); //结果是7
      

  3.   

    还要有闭包的概念才行。。
    在执行add.curry(1);的时候,生成了一个闭包
    而args和that被记录在闭包里。
      

  4.   

    JavaScript语言精粹一书不适合初学者看,并非多么的深奥,而是对语言本身不熟悉的话,很多东西你看起来就不那么顺其自然了如果有条件的话 可以先看看《精通JavaScript》和《JavaScript高级程序设计》等书