实现函数柯里化、实现add(1)(2)(3)

文章目录

  • 1 实现函数柯里化
  • 2 实现add(1)(2)(3)
    • 2.1 粗暴版
    • 2.2 函数柯里化
      • 2.2.1参数长度固定
      • 2.2.2 参数长度不固定

1 实现函数柯里化

  • 柯里化大多数情况下是为了减少重复传递的不变参数。

  • 什么是函数柯里化:

    • 函数柯里化是一种将多个参数的函数转换为单个参数函数的技术。
    • 转换完毕之后的函数只需要传递一部分参数进行调用,并且会返回一个新的函数去处理剩下的参数。
function curry(fn, args) {
    let len = fn.length;
    args = args || [];
    return function () {
        let newArgs = args.concat(Array.prototype.slice.call(arguments));
        if (newArgs.length < len) {
            return curry.call(this, fn, newArgs);
        } else {
            return fn.apply(this, newArgs);
        }
    }
}

function add(a, b, c) {
    return a + b + c;
}

var addCur = curry(add);
console.log(addCur(2)(3)(4));
console.log(addCur(2, 3, 4));
console.log(addCur(2)(3, 4));
console.log(addCur(2, 3)(4));

2 实现add(1)(2)(3)

2.1 粗暴版

function add(a) {
    return function(b) {
        return function(c) {
            return a + b + c;
        }
    }
}
console.log(add(1)(2)(3));

2.2 函数柯里化

2.2.1参数长度固定

function add(m) {
    let temp = function(n) {
        return add(m + n);
    }
    temp.toString = function() {
        return m;
    }
    return temp;
}
console.log(add(1)(2)(3));
console.log(add(3)(4)(5)(6));

2.2.2 参数长度不固定

详见第1节 函数柯里化。

你可能感兴趣的:(前端面试,javascript,前端,开发语言)