国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 擴(kuò)展 -- currying 柯里函數(shù)

Pocher / 1772人閱讀

摘要:里也有柯里化的實(shí)現(xiàn),只是平時(shí)沒有在意。如果函數(shù)柯里化后雖然生搬硬套,不過現(xiàn)實(shí)業(yè)務(wù)也會有類似場景。

柯里化

先解釋下什么是 柯里化

在計(jì)算機(jī)科學(xué)中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。

js 里也有柯里化的實(shí)現(xiàn),只是平時(shí)沒有在意。先把原文簡介貼出來,此文都來自于它,有興趣的可直接訪問:JavaScript 專題之函數(shù)柯里化

里面有段方法,關(guān)于柯里化函數(shù):

// https://github.com/mqyqingfeng/Blog/issues/42#issuecomment-323919896
var curry = fn =>
    (judge = (...args) =>
        args.length === fn.length ? fn(...args) : arg => judge(...args, arg));

設(shè)計(jì) es6 的一些特性,或許一下子很難理解,這里稍微寫的再繁瑣下:

var curry = function(fn) {
    /**
     * judge
     * args: 柯里化函數(shù)的參數(shù)
     */
    return function judge() {
        var args = [].slice.call(arguments);
        // 柯里化定義的函數(shù)參數(shù) == 調(diào)用該函數(shù)的參數(shù)
        if (args.length >= fn.length) {
            return fn(...args);
        } else {
            // 通過 ()() 形式調(diào)用 -- 柯里化
            return function() {
                var args2 = [].slice.call(arguments);
                // 拼接成新的參數(shù),遞歸繼續(xù)judge
                return judge.apply(null, args.concat(args2));
            };
        }
    };
};
場景舉例

參數(shù)調(diào)用來調(diào)用去,都暈了,那到底有什么用呢?

比如:實(shí)現(xiàn)不同幅度的相加功能

var sum = function(increment, number) {
    return increment + number;
};
// 雖然都是相同的相加邏輯,可能在函數(shù)命名、功能定義上會有不同(當(dāng)然這里只是硬性舉個(gè)例子)。
var addOne = sum;
var addTen = sum;

console.log(addOne(1, 5)); //6
console.log(addTen(10, 5)); //15

如果函數(shù)柯里化后:

var addOne = curry(sum)(1)(5); //6
var addTen = curry(sum)(10)(5); //15

雖然生搬硬套,不過現(xiàn)實(shí)業(yè)務(wù)也會有類似場景。這里能體會到 curry 帶來的好處:

定制化。原有共性的方法,被拆成符合不同場景的業(yè)務(wù)方法

參數(shù)明確。由于 curry 是根據(jù)固定參數(shù)約定的,所以通過()()形式固化了參數(shù)用意(比如第一個(gè)是累加數(shù),第二個(gè)是被相加數(shù))

再舉一個(gè)簡單的 Promise 實(shí)現(xiàn)舉個(gè)例子:

function MyPromise(fn) {
    // currying
    this.resolveFn = function(callback) {
        return callback;
    }
    this.then = function(callback) {
        fn(this.resolveFn(callback));
    }
}

new MyPromise(function(resolve, reject) {
    setTimeout(function() {
        resolve(true)
    }, 1000)
}).then(function(data) {
    console.log(data);
})
參考
我只是知識點(diǎn)的“加工者”, 更多內(nèi)容請查閱原文鏈接  , 同時(shí)感謝原作者的付出:

函數(shù)式編程入門教程

JavaScript 專題之函數(shù)柯里化

柯里化 維基百科

關(guān)于我

如果你覺得這篇文章對你有幫助, 請點(diǎn)個(gè)或者分享給更多的道友。

也可以掃碼關(guān)注我的 微信訂閱號 - [ 前端雨爸 ], 第一時(shí)間收到技術(shù)文章 , 工作之余我會持續(xù)輸出

最后感謝閱讀, 你們的支持是我寫作的最大動力

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/104672.html

相關(guān)文章

  • 從一道面試題認(rèn)識函數(shù)柯里

    摘要:函數(shù)柯里化在函數(shù)式編程中,函數(shù)是一等公民。函數(shù)柯里化的主要作用和特點(diǎn)就是參數(shù)復(fù)用提前返回和延遲執(zhí)行??赡茉趯?shí)際應(yīng)用場景中,很少使用函數(shù)柯里化的解決方案,但是了解認(rèn)識函數(shù)柯里化對自身的提升還是有幫助的。 最近在整理面試資源的時(shí)候,發(fā)現(xiàn)一道有意思的題目,所以就記錄下來。 題目 如何實(shí)現(xiàn) multi(2)(3)(4)=24? 首先來分析下這道題,實(shí)現(xiàn)一個(gè) multi 函數(shù)并依次傳入?yún)?shù)執(zhí)行,...

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

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

    xiaowugui666 評論0 收藏0
  • 高階函數(shù)應(yīng)用 —— 柯里化與反柯里

    摘要:柯里化通用式上面的柯里化函數(shù)沒涉及到高階函數(shù),也不具備通用性,無法轉(zhuǎn)換形參個(gè)數(shù)任意或未知的函數(shù),我們接下來封裝一個(gè)通用的柯里化轉(zhuǎn)換函數(shù),可以將任意函數(shù)轉(zhuǎn)換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數(shù)的一種應(yīng)用,在這之前...

    wyk1184 評論0 收藏0
  • JS中的柯里

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

    Hancock_Xu 評論0 收藏0
  • 【進(jìn)階 6-2 期】深入高階函數(shù)應(yīng)用之柯里

    摘要:引言上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說明了使用高階函數(shù)和不使用高階函數(shù)的情況。我們期望函數(shù)輸出,但是實(shí)際上調(diào)用柯里化函數(shù)時(shí),所以調(diào)用時(shí)就已經(jīng)執(zhí)行并輸出了,而不是理想中的返回閉包函數(shù),所以后續(xù)調(diào)用將會報(bào)錯(cuò)。引言 上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說明了使用高階函數(shù)和不使用高階函數(shù)的情況。后面幾部分將結(jié)合實(shí)際應(yīng)用場景介紹高階函數(shù)的應(yīng)用,本節(jié)先來聊聊函數(shù)柯里化,通過介紹其定義、比較常見的...

    stackvoid 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<