curry


實現函數的科里化-- 原理
傳入一個普通函數,函數依次傳入參數,當函數的形參個數 >= 函數的實參個數時調用函數, 函數的形參個數為fn.length;當函數的實參小於形參時返回新的函數並將實參傳遞給新的函數,直到實參 >= 形參。使用了閉包和遞歸。

function curry (fn) {
    return function carried (...args) {
        if (fn.length > args.length) {
            return function () {
                // 將之前的參數和新傳入的參數(即目前的所有參數)傳遞給新的函數,遞歸調用carried函數
                return carried(...args.concat(Array.from(arguments)))
            }
        }
        // 遞歸的出口
        return fn(...args)
    }
}

// 測試
// 要科里化的函數
function getSum (a, b, c) {
    return a + b + c
}

let mycurried = curry(getSum)
console.log(mycurried(1)(2)(3))
console.log(mycurried(1,2)(3))
console.log(mycurried()(1,2)(3))
console.log(mycurried(1,2,3))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM