函数柯里化和闭包


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

一个简单例子

        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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM