摘要:今天了解到一個新名詞柯里化,研究一番后總結如下一柯里化定義把接受多個參數的函數變換成接受一個單一參數最初函數的第一個參數的函數,并且返回接受余下的參數且返回結果的新函數的技術。如果使用反柯里化,則可以這樣寫震驚某前端只會,竟月入百萬。。。
今天了解到一個新名詞:柯里化,研究一番后總結如下:
一· 柯里化 定義把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數且返回結果的新函數的技術。縮小適用范圍,創建一個針對性更強的函數。
通用實現Function.prototype.currying = function (arg1) { var _this = this; return function () { [].unshift.call(arguments, arg1); return _this.apply(_this, arguments); } };示例
1.現有一個求和函數:
function sum(a, ...num) { return num.reduce((sum, e) => { return sum + e; }, a); }
我們想要它在100的基礎上求和則可以實現如下(有點類似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: "大衛", "sex": "男"}, cb); testApi({name: "小衛", "sex": "女"}, cb); testApi({name: "中衛", "sex": "人妖"}, cb);
或者這樣:
var testApi = ((url) => { return function () { $.post(url, arguments[0], (data) => console.log(data)) } })("/crm/customer/add"); testApi({name: "大衛", "sex": "男"}); testApi({name: "小衛", "sex": "女"}); testApi({name: "中衛", "sex": "人妖"});二· 反柯里化 定義
基本就是柯里化反向操作了。擴大適用性。
通用實現Function.prototype.uncurrying = function () { var _this = this; return function () { return _this.apply(arguments[0], [].slice.call(arguments, 1)) } };示例
上邊的通用實現方法中,由于: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,竟月入百萬。。。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/92572.html
摘要:函數柯里化的對偶是,一種使用匿名單參數函數來實現多參數函數的方法。這是基于的富應用開發的方法實現反柯里化可能遇到這種情況拿到一個柯里化后的函數,卻想要它柯里化之前的版本,這本質上就是想將類似的函數變回類似的函數。 什么是柯里化? 官方的說法 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數...
摘要:柯里化通用式上面的柯里化函數沒涉及到高階函數,也不具備通用性,無法轉換形參個數任意或未知的函數,我們接下來封裝一個通用的柯里化轉換函數,可以將任意函數轉換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數的一種應用,在這之前...
摘要:作為函數式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。而反柯里化,從字面講,意義和用法跟函數柯里化相比正好相反,擴大適用范圍,創建一個應用范圍更廣的函數。作為函數式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 可以對照另外一篇介紹 JS 柯里化 的文章一起看~ 1. 簡介 柯里化,是固定部分參數,返回一個接受剩余參數的函數,也稱為部分計算函數,目的是為了縮...
摘要:最后,我們反過來看,其實反柯里化相當于把原來的形式,轉換成了,使得的使用范圍泛化了。更抽象地表達,反柯里化,使得原來調用,可以轉成形式的調用。 反柯里化 相反,反柯里化的作用在與擴大函數的適用性,使本來作為特定對象所擁有的功能的函數可以被任意對象所用.即把如下給定的函數簽名, obj.func(arg1, arg2) 轉化成一個函數形式,簽名如下: func(obj, arg1, ar...
摘要:里也有柯里化的實現,只是平時沒有在意。如果函數柯里化后雖然生搬硬套,不過現實業務也會有類似場景。 柯里化 先解釋下什么是 柯里化 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術。 js 里也有柯里化的實現,只是平時沒有在意。先把原文簡介貼...
閱讀 2253·2021-11-22 14:56
閱讀 10034·2021-09-08 10:45
閱讀 1978·2019-08-30 13:54
閱讀 2867·2019-08-29 16:54
閱讀 2009·2019-08-29 14:20
閱讀 1778·2019-08-29 12:25
閱讀 1856·2019-08-29 12:17
閱讀 1054·2019-08-23 18:29