摘要:今天了解到一個新名詞柯里化,研究一番后總結(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
摘要:函數(shù)柯里化的對偶是,一種使用匿名單參數(shù)函數(shù)來實現(xiàn)多參數(shù)函數(shù)的方法。這是基于的富應(yīng)用開發(fā)的方法實現(xiàn)反柯里化可能遇到這種情況拿到一個柯里化后的函數(shù),卻想要它柯里化之前的版本,這本質(zhì)上就是想將類似的函數(shù)變回類似的函數(shù)。 什么是柯里化? 官方的說法 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù)...
摘要:柯里化通用式上面的柯里化函數(shù)沒涉及到高階函數(shù),也不具備通用性,無法轉(zhuǎn)換形參個數(shù)任意或未知的函數(shù),我們接下來封裝一個通用的柯里化轉(zhuǎn)換函數(shù),可以將任意函數(shù)轉(zhuǎn)換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數(shù)的一種應(yīng)用,在這之前...
摘要:作為函數(shù)式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。而反柯里化,從字面講,意義和用法跟函數(shù)柯里化相比正好相反,擴大適用范圍,創(chuàng)建一個應(yīng)用范圍更廣的函數(shù)。作為函數(shù)式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 可以對照另外一篇介紹 JS 柯里化 的文章一起看~ 1. 簡介 柯里化,是固定部分參數(shù),返回一個接受剩余參數(shù)的函數(shù),也稱為部分計算函數(shù),目的是為了縮...
摘要:最后,我們反過來看,其實反柯里化相當于把原來的形式,轉(zhuǎn)換成了,使得的使用范圍泛化了。更抽象地表達,反柯里化,使得原來調(diào)用,可以轉(zhuǎn)成形式的調(diào)用。 反柯里化 相反,反柯里化的作用在與擴大函數(shù)的適用性,使本來作為特定對象所擁有的功能的函數(shù)可以被任意對象所用.即把如下給定的函數(shù)簽名, obj.func(arg1, arg2) 轉(zhuǎn)化成一個函數(shù)形式,簽名如下: func(obj, arg1, ar...
摘要:里也有柯里化的實現(xiàn),只是平時沒有在意。如果函數(shù)柯里化后雖然生搬硬套,不過現(xiàn)實業(yè)務(wù)也會有類似場景。 柯里化 先解釋下什么是 柯里化 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。 js 里也有柯里化的實現(xiàn),只是平時沒有在意。先把原文簡介貼...
閱讀 2229·2021-11-22 14:56
閱讀 9832·2021-09-08 10:45
閱讀 1966·2019-08-30 13:54
閱讀 2857·2019-08-29 16:54
閱讀 2003·2019-08-29 14:20
閱讀 1772·2019-08-29 12:25
閱讀 1851·2019-08-29 12:17
閱讀 1048·2019-08-23 18:29