成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS手動(dòng)實(shí)現(xiàn)柯里化(curry)函數(shù)

Pluser / 1467人閱讀

摘要:實(shí)現(xiàn)效果實(shí)現(xiàn)思路通過(guò)閉包的方式儲(chǔ)存?zhèn)魅雲(yún)?shù)通過(guò)函數(shù)的屬性獲得參數(shù)個(gè)數(shù)當(dāng)參數(shù)個(gè)數(shù)不夠時(shí)直接返回方法存儲(chǔ)的參數(shù)個(gè)數(shù)等于原函數(shù)參數(shù)個(gè)數(shù)時(shí)執(zhí)行原函數(shù)如果使用參數(shù)默認(rèn)值,將不等于實(shí)際參數(shù)個(gè)數(shù)參數(shù)由獲取,直接使用參數(shù)實(shí)現(xiàn)源碼實(shí)現(xiàn)獲取原函數(shù)的參數(shù)個(gè)數(shù)存儲(chǔ)

實(shí)現(xiàn)效果
const curry_fn = curry(fn);
fn(1, 2, 3) == curry_fn(1)(2)(3);
實(shí)現(xiàn)思路

通過(guò)閉包的方式儲(chǔ)存?zhèn)魅雲(yún)?shù)

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

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

存儲(chǔ)的參數(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存儲(chǔ)傳入?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")
        }
        // 存儲(chǔ)的參數(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;
    }
}
更多文章 yjy5264.github.io

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108700.html

相關(guān)文章

  • 翻譯連載 | JavaScript 輕量級(jí)函數(shù)式編程-第3章:管理函數(shù)的輸入 |《你不知道的JS》姊

    摘要:但是,對(duì)函數(shù)式編程而言,這個(gè)行為的重要性是毋庸置疑的。關(guān)于該模式更正式的說(shuō)法是偏函數(shù)嚴(yán)格來(lái)講是一個(gè)減少函數(shù)參數(shù)個(gè)數(shù)的過(guò)程這里的參數(shù)個(gè)數(shù)指的是希望傳入的形參的數(shù)量。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著滬江血液的純粹工程:認(rèn)真,是 HTML 最堅(jiān)實(shí)的梁柱;分享,是...

    xiaowugui666 評(píng)論0 收藏0
  • JS中的柯里

    摘要:作為函數(shù)式編程語(yǔ)言,帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。個(gè)人理解不知道對(duì)不對(duì)延遲執(zhí)行柯里化的另一個(gè)應(yīng)用場(chǎng)景是延遲執(zhí)行。不斷的柯里化,累積傳入的參數(shù),最后執(zhí)行。 作為函數(shù)式編程語(yǔ)言,JS帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。 這里可以對(duì)照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡(jiǎn)介 柯里化(Currying),又稱部分求值(Partial Evalu...

    Hancock_Xu 評(píng)論0 收藏0
  • js 擴(kuò)展 -- currying 柯里函數(shù)

    摘要:里也有柯里化的實(shí)現(xiàn),只是平時(shí)沒(méi)有在意。如果函數(shù)柯里化后雖然生搬硬套,不過(guò)現(xiàn)實(shí)業(yè)務(wù)也會(huì)有類似場(chǎng)景。 柯里化 先解釋下什么是 柯里化 在計(jì)算機(jī)科學(xué)中,柯里化(英語(yǔ):Currying),又譯為卡瑞化或加里化,是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。 js 里也有柯里化的實(shí)現(xiàn),只是平時(shí)沒(méi)有在意。先把原文簡(jiǎn)介貼...

    Pocher 評(píng)論0 收藏0
  • JS中的柯里 及 精巧的自動(dòng)柯里實(shí)現(xiàn)

    摘要:笑中自動(dòng)柯里化的精巧實(shí)現(xiàn)柯里化是函數(shù)式編程中很重要的一環(huán),很多函數(shù)式語(yǔ)言都會(huì)默認(rèn)將函數(shù)自動(dòng)柯里化。 什么是柯里化? 在計(jì)算機(jī)科學(xué)中,柯里化(Currying)是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。這個(gè)技術(shù)由 Christopher Strachey 以邏輯學(xué)家 Haskell Curry 命名的,盡管...

    moven_j 評(píng)論0 收藏0
  • 高級(jí)函數(shù)技巧-函數(shù)柯里

    摘要:如果你對(duì)函數(shù)式編程有一定了解,函數(shù)柯里化是不可或缺的,利用函數(shù)柯里化,可以在開(kāi)發(fā)中非常優(yōu)雅的處理復(fù)雜邏輯。同樣先看簡(jiǎn)單版本的方法,以方法為例,代碼來(lái)自高級(jí)程序設(shè)計(jì)加強(qiáng)版實(shí)現(xiàn)上面函數(shù),可以換成任何其他函數(shù),經(jīng)過(guò)函數(shù)處理,都可以轉(zhuǎn)成柯里化函數(shù)。 我們經(jīng)常說(shuō)在Javascript語(yǔ)言中,函數(shù)是一等公民,它們本質(zhì)上是十分簡(jiǎn)單和過(guò)程化的??梢岳煤瘮?shù),進(jìn)行一些簡(jiǎn)單的數(shù)據(jù)處理,return 結(jié)果,...

    shixinzhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<