摘要:今天了解到一個(gè)新名詞柯里化,研究一番后總結(jié)如下一柯里化定義把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)最初函數(shù)的第一個(gè)參數(shù)的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。如果使用反柯里化,則可以這樣寫震驚某前端只會(huì),竟月入百萬(wàn)。。。
今天了解到一個(gè)新名詞:柯里化,研究一番后總結(jié)如下:
一· 柯里化 定義把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。縮小適用范圍,創(chuàng)建一個(gè)針對(duì)性更強(qiáng)的函數(shù)。
通用實(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)有一個(gè)求和函數(shù):
function sum(a, ...num) { return num.reduce((sum, e) => { return sum + e; }, a); }
我們想要它在100的基礎(chǔ)上求和則可以實(shí)現(xiàn)如下(有點(diǎn)類似python中的裝飾器):
var total = sum.currying(100)(5, 6, 7, 8); console.log(total)//126
2.測(cè)試接口請(qǐng)求:
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": "人妖"});二· 反柯里化 定義
基本就是柯里化反向操作了。擴(kuò)大適用性。
通用實(shí)現(xiàn)Function.prototype.uncurrying = function () { var _this = this; return function () { return _this.apply(arguments[0], [].slice.call(arguments, 1)) } };示例
上邊的通用實(shí)現(xiàn)方法中,由于:arguments對(duì)象不是一個(gè) Array 。它類似于Array,但除了長(zhǎng)度之外沒有任何Array屬性,但可以對(duì)它使用Array的方法。操作時(shí)需要這樣:Array.prototype.unshift.call(arguments, arg)或[].unshift.call(arguments, arg)。
如果使用反柯里化,則可以這樣寫:
var array_unshift = Array.prototype.unshift.uncurrying(); array_unshift(arguments, arg)//震驚!某前端只會(huì)php,竟月入百萬(wàn)。。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92572.html
摘要:函數(shù)柯里化的對(duì)偶是,一種使用匿名單參數(shù)函數(shù)來(lái)實(shí)現(xiàn)多參數(shù)函數(shù)的方法。這是基于的富應(yīng)用開發(fā)的方法實(shí)現(xiàn)反柯里化可能遇到這種情況拿到一個(gè)柯里化后的函數(shù),卻想要它柯里化之前的版本,這本質(zhì)上就是想將類似的函數(shù)變回類似的函數(shù)。 什么是柯里化? 官方的說(shuō)法 在計(jì)算機(jī)科學(xué)中,柯里化(英語(yǔ):Currying),又譯為卡瑞化或加里化,是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù)...
摘要:柯里化通用式上面的柯里化函數(shù)沒涉及到高階函數(shù),也不具備通用性,無(wú)法轉(zhuǎn)換形參個(gè)數(shù)任意或未知的函數(shù),我們接下來(lái)封裝一個(gè)通用的柯里化轉(zhuǎn)換函數(shù),可以將任意函數(shù)轉(zhuǎn)換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數(shù)的一種應(yīng)用,在這之前...
摘要:作為函數(shù)式編程語(yǔ)言,帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。而反柯里化,從字面講,意義和用法跟函數(shù)柯里化相比正好相反,擴(kuò)大適用范圍,創(chuàng)建一個(gè)應(yīng)用范圍更廣的函數(shù)。作為函數(shù)式編程語(yǔ)言,JS帶來(lái)了很多語(yǔ)言上的有趣特性,比如柯里化和反柯里化。 可以對(duì)照另外一篇介紹 JS 柯里化 的文章一起看~ 1. 簡(jiǎn)介 柯里化,是固定部分參數(shù),返回一個(gè)接受剩余參數(shù)的函數(shù),也稱為部分計(jì)算函數(shù),目的是為了縮...
摘要:最后,我們反過(guò)來(lái)看,其實(shí)反柯里化相當(dāng)于把原來(lái)的形式,轉(zhuǎn)換成了,使得的使用范圍泛化了。更抽象地表達(dá),反柯里化,使得原來(lái)調(diào)用,可以轉(zhuǎn)成形式的調(diào)用。 反柯里化 相反,反柯里化的作用在與擴(kuò)大函數(shù)的適用性,使本來(lái)作為特定對(duì)象所擁有的功能的函數(shù)可以被任意對(duì)象所用.即把如下給定的函數(shù)簽名, obj.func(arg1, arg2) 轉(zhuǎn)化成一個(gè)函數(shù)形式,簽名如下: func(obj, arg1, ar...
摘要:里也有柯里化的實(shí)現(xiàn),只是平時(shí)沒有在意。如果函數(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í)沒有在意。先把原文簡(jiǎn)介貼...
閱讀 2389·2021-11-22 14:56
閱讀 10868·2021-09-08 10:45
閱讀 2071·2019-08-30 13:54
閱讀 2921·2019-08-29 16:54
閱讀 2089·2019-08-29 14:20
閱讀 1844·2019-08-29 12:25
閱讀 1909·2019-08-29 12:17
閱讀 1108·2019-08-23 18:29