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

資訊專欄INFORMATION COLUMN

關(guān)于js中的柯里化(Currying)與反柯里化(Uncurrying)

Rocko / 978人閱讀

摘要:今天了解到一個新名詞柯里化,研究一番后總結(jié)如下一柯里化定義把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)最初函數(shù)的第一個參數(shù)的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。如果使用反柯里化,則可以這樣寫震驚某前端只會,竟月入百萬。。。

今天了解到一個新名詞:柯里化,研究一番后總結(jié)如下:

一· 柯里化 定義

把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。縮小適用范圍,創(chuàng)建一個針對性更強的函數(shù)。

通用實現(xiàn)
Function.prototype.currying = function (arg1) {
    var _this = this;
    return function () {
        [].unshift.call(arguments, arg1);
        return _this.apply(_this, arguments);
    }
};
示例

1.現(xiàn)有一個求和函數(shù):

function sum(a, ...num) {
    return num.reduce((sum, e) => {
        return sum + e;
    }, a);
}

我們想要它在100的基礎(chǔ)上求和則可以實現(xiàn)如下(有點類似python中的裝飾器):

var total = sum.currying(100)(5, 6, 7, 8);
console.log(total)//126

2.測試接口請求:

var testApi = $.post.currying("/crm/customer/add");
var cb = (data) => console.log(data);
testApi({name: "大衛(wèi)", "sex": "男"}, cb);
testApi({name: "小衛(wèi)", "sex": "女"}, cb);
testApi({name: "中衛(wèi)", "sex": "人妖"}, cb);

或者這樣:

var testApi = ((url) => {
    return function () {
        $.post(url, arguments[0], (data) => console.log(data))
    }
})("/crm/customer/add");
testApi({name: "大衛(wèi)", "sex": "男"});
testApi({name: "小衛(wèi)", "sex": "女"});
testApi({name: "中衛(wèi)", "sex": "人妖"});
二· 反柯里化 定義

基本就是柯里化反向操作了。擴大適用性。

通用實現(xiàn)
Function.prototype.uncurrying = function () {
    var _this = this;
    return function () {
        return _this.apply(arguments[0], [].slice.call(arguments, 1))
    }
};
示例

上邊的通用實現(xiàn)方法中,由于:arguments對象不是一個 Array 。它類似于Array,但除了長度之外沒有任何Array屬性,但可以對它使用Array的方法。操作時需要這樣:Array.prototype.unshift.call(arguments, arg)[].unshift.call(arguments, arg)

如果使用反柯里化,則可以這樣寫:

var array_unshift = Array.prototype.unshift.uncurrying();
array_unshift(arguments, arg)//震驚!某前端只會php,竟月入百萬。。。

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

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

相關(guān)文章

  • JavaScript函數(shù)柯里

    摘要:函數(shù)柯里化的對偶是,一種使用匿名單參數(shù)函數(shù)來實現(xiàn)多參數(shù)函數(shù)的方法。這是基于的富應(yīng)用開發(fā)的方法實現(xiàn)反柯里化可能遇到這種情況拿到一個柯里化后的函數(shù),卻想要它柯里化之前的版本,這本質(zhì)上就是想將類似的函數(shù)變回類似的函數(shù)。 什么是柯里化? 官方的說法 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù)...

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

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

    wyk1184 評論0 收藏0
  • JavaScript 函數(shù)式編程技巧 - 反柯里

    摘要:作為函數(shù)式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。而反柯里化,從字面講,意義和用法跟函數(shù)柯里化相比正好相反,擴大適用范圍,創(chuàng)建一個應(yīng)用范圍更廣的函數(shù)。作為函數(shù)式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 可以對照另外一篇介紹 JS 柯里化 的文章一起看~ 1. 簡介 柯里化,是固定部分參數(shù),返回一個接受剩余參數(shù)的函數(shù),也稱為部分計算函數(shù),目的是為了縮...

    zhjx922 評論0 收藏0
  • JS進階篇--JS中的柯里( uncurrying)

    摘要:最后,我們反過來看,其實反柯里化相當于把原來的形式,轉(zhuǎn)換成了,使得的使用范圍泛化了。更抽象地表達,反柯里化,使得原來調(diào)用,可以轉(zhuǎn)成形式的調(diào)用。 反柯里化 相反,反柯里化的作用在與擴大函數(shù)的適用性,使本來作為特定對象所擁有的功能的函數(shù)可以被任意對象所用.即把如下給定的函數(shù)簽名, obj.func(arg1, arg2) 轉(zhuǎn)化成一個函數(shù)形式,簽名如下: func(obj, arg1, ar...

    LdhAndroid 評論0 收藏0
  • js 擴展 -- currying 柯里函數(shù)

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

    Pocher 評論0 收藏0

發(fā)表評論

0條評論

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