函数柯里化

  首先看一下函数柯里化的定义:  函数柯里化指的是一个转化过程,在这个过程中,把一个接受多个参数的函数,转化成一个个嵌套的函数,这些嵌套的函数只接受一个参数。举一个简单的例子体验一下, 我们写一个add 函数,它接受两个参数,然后返回参数的和。

const add = (x,y) => x + y;

  简单调用,add(2, 3) 返回5,没有什么可说了。 现在我们把这个函数进行柯里化。柯里化,每一个函数只接受一个参数,所以我们要先声明一个函数,它接受一个参数,假设x, 

function addCurried(x){
   }

  由于add 接受两个参数,所以还剩一个参数y, 只有函数才能接受参数, 所以addCurried 还要返回一个函数接受参数 y.

function addCurried (x) {
    return function(y) {
        
    }
}

  这时两个参数都获取到了,就可以进行计算了。所以可以在返回的函数中直接写return x + y;

function addCurried (x) {
    return function(y) {
        return x + y;
    }
}
  现在我们就完成了函数add的柯里化。一个函数接受两个参数,变成了两个嵌套函数,每一函数都只接受一个参数。柯里化完成后,函数的调用也发生了变化,一次调用只返回一个函数,
let fn = addCurried(2);
console.log(fn)

  所以还要调用一次

let result = fn(3);
console.log(result);

  简化方式的调用

let result = addCurried(2)(3);
console.log(result);

  现在我们一步一步地把add函数进行了柯里化,如果把这个过程进行封装,那么就可以对任意接受两个参数的函数进行柯里化。我们把这个函数命名为curry,它首先接受一个实行柯里化函数作为参数,然后再返回我们上面的addCurried函数

function curry(fn) {
    return function addCurried(x) {
        return function(y) {
            return fn(x, y)
        }
    }
}

  

猜你喜欢

转载自www.cnblogs.com/SamWeb/p/8892707.html