溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript實(shí)現(xiàn)柯里化(curry)函數(shù)的案例

發(fā)布時(shí)間:2020-10-19 14:29:02 來源:億速云 閱讀:197 作者:小新 欄目:web開發(fā)

小編給大家分享一下JavaScript實(shí)現(xiàn)柯里化(curry)函數(shù)的案例,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

實(shí)現(xiàn)效果

const curry_fn = curry(fn);
fn(1, 2, 3) == curry_fn(1)(2)(3);

實(shí)現(xiàn)思路

  1. 通過閉包的方式儲存?zhèn)魅雲(yún)?shù)

  2. 通過函數(shù)的length屬性獲得參數(shù)個(gè)數(shù)

  3. 當(dāng)參數(shù)個(gè)數(shù)不夠時(shí)直接返回方法

  4. 存儲的參數(shù)個(gè)數(shù)等于原函數(shù)參數(shù)個(gè)數(shù)時(shí)執(zhí)行原函數(shù)

  • 如果使用ES6參數(shù)默認(rèn)值,length將不等于實(shí)際參數(shù)個(gè)數(shù)

  • 參數(shù)由arguments獲取,ES6直接使用rest參數(shù)實(shí)現(xiàn)

源碼實(shí)現(xiàn)

function curry(fn) {
    var length = fn.length; //獲取原函數(shù)的參數(shù)個(gè)數(shù)
    var args = []; // args存儲傳入?yún)?shù)
    return function curryFn() {
        // 將arguments轉(zhuǎn)換成數(shù)組
        var curryArgs = Array.prototype.slice.call(arguments); 
        args = args.concat(curryArgs);
        if (args.length > length) {
            throw new Error('arguments length error')
        }
        // 存儲的參數(shù)個(gè)數(shù)等于原函數(shù)參數(shù)個(gè)數(shù)時(shí)執(zhí)行原函數(shù)
        if (args.length === length) {
            return fn.apply(null, args);
        }
        // 否則繼續(xù)返回函數(shù)
        return curryFn;
    };
}

ES6版

function curry(fn) {
    let length = fn.length;
    let args = [];
    return function curryFn(...curryArgs) {
        args = args.concat(curryArgs);
        if (args.length > length) {
            throw new Error('arguments length error')
        }
        if (args.length === length) {
            return fn(...args);
        }
        return curryFn;
    }
}

看完了這篇文章,相信你對JavaScript實(shí)現(xiàn)柯里化(curry)函數(shù)的案例有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI