函数柯里化和闭包

Posted on 2020-09-27 22:02  猫头唔食鱼  阅读(758)  评论(0编辑  收藏  举报

函数柯里化是指把函数多个参数,转化成一个参数传入。

一个简单例子

        let add = (a, b) => a + b
        console.log(add(2, 3));
        // 函数柯里化
        let currying = (a) => (b) => a + b
        console.log(currying(2)(3));

但是这有啥用呢?

再看另一个例子:

   let pay = (discount,price) =>discount*price   // 最好把固定的参数写前面
        let curry = discount=>price=>pay(discount,price)
        let discount =  0.1
        let payCurry = curry(discount)  // 这个discount是实参
        let pc = payCurry(500)
         console.log(pc); // 50

discount是固定的,那就柯里化一下,每次传个价格就好了

 

再回归到add方法

let add = a=>b=>a+b

把他转换成es5写法:

就会发现,原来这是个闭包,所以说函数柯里化就是用了闭包的特性!!

  // 转换成es5 ,这是个闭包
    let add = function(a){
        return function(b){
            return a +b 
        }
    }

 console.log(add(3)(5)); // 8
    let currying = add(3)
    let curry = bx(5)
    console.log(curry); // 8