函數柯里化和閉包


函數柯里化是指把函數多個參數,轉化成一個參數傳入。

一個簡單例子

        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