函数柯里化的实现

176 阅读1分钟

函数柯里化

var add = function(x) {
  return function(y) {
    return x + y;
  };
};
​
var increment = add(1);
var addTen = add(10);
​
increment(2);
// 3addTen(2);
// 12add(1)(2);
// 3

模拟实现无限调用函数

注意:打印函数时会自动调用 toString()方法,函数 add(a) 返回一个闭包 sum(b),函数 sum() 中累加计算 a = a + b,只需要重写sum.toString()方法返回变量 a 就OK了。

function add(a) {
    function sum(b) { // 使用闭包
        a = a + b; // 累加
        return sum;
    }
    sum.toString = function() { // 重写toString()方法
        return a;
    }
    return sum; // 返回一个函数
}
​
add(1); // 1
add(1)(2);  // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10 
// 注意,在chrome中打印为f 1、f 3,因为浏览器没有正常调用toString,可以用+add(1)(2)