摘要:百科以上就是一個(gè)簡單的函數(shù)柯里化的實(shí)現(xiàn)。運(yùn)用為什么要封裝一層呢就要說到柯里化的運(yùn)用了。中最最經(jīng)典的柯里化運(yùn)用就是了,用于函數(shù)的值綁定,同時(shí)并非讓函數(shù)立即執(zhí)行。
概念
是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。 from wiki百科
Function.prototype.curry = function() { let args = arguments; let that = this; return function() { return that.apply(null, [...args].concat(...arguments)); } } function add() { let args = [...arguments]; let sum = 0, i = 0; while(i < args.length) { sum += args[i]; i++; } return sum; } console.log(add.curry(2, 3)(4)) // 9
以上就是 一個(gè)簡單的函數(shù)柯里化的實(shí)現(xiàn)。
運(yùn)用為什么要封裝一層呢?就要說到柯里化的運(yùn)用了。js中最最經(jīng)典的柯里化運(yùn)用就是bind了, 用于函數(shù)的this值綁定, 同時(shí)并非讓函數(shù)立即執(zhí)行。
// bind實(shí)現(xiàn) Function.prototype.bind = function (context) { var that = this var args = Array.prototype.slice.call(arguments, 1) return function() { return that.apply(context, args) } }
還有一些網(wǎng)上的例子,日常開發(fā)中也常常會(huì)用到,如參數(shù)復(fù)用。
引用https://www.jianshu.com/p/297...
// 函數(shù)封裝后 function check(reg, txt) { return reg.test(txt) } check(/d+/g, "test") //false check(/[a-z]+/g, "test") //true // Currying后 function curryingCheck(reg) { return function(txt) { return reg.test(txt) } } var hasNumber = curryingCheck(/d+/g) var hasLetter = curryingCheck(/[a-z]+/g) hasNumber("test1") // true hasNumber("testtest") // false hasLetter("21212") // false
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/104558.html
摘要:柯里化通用式上面的柯里化函數(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)用,在這之前...
摘要:函數(shù)柯里化是把支持多個(gè)參數(shù)的函數(shù)變成接收單一參數(shù)的函數(shù),并返回一個(gè)函數(shù)能接收處理剩余參數(shù),而反柯里化就是把參數(shù)全部釋放出來。但在一些復(fù)雜的業(yè)務(wù)邏輯封裝中,函數(shù)柯里化能夠?yàn)槲覀兲峁└玫膽?yīng)對(duì)方案,讓我們的函數(shù)更具自由度和靈活性。 showImg(https://segmentfault.com/img/bVburN1?w=800&h=600); 柯里化(Curring, 以邏輯學(xué)家Has...
摘要:作為函數(shù)式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。在一些函數(shù)式編程語言中,會(huì)定義一個(gè)特殊的占位變量。個(gè)人理解不知道對(duì)不對(duì)延遲執(zhí)行柯里化的另一個(gè)應(yīng)用場(chǎng)景是延遲執(zhí)行。不斷的柯里化,累積傳入的參數(shù),最后執(zhí)行。作為函數(shù)式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 這里可以對(duì)照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡介 柯里化(Currying)...
摘要:作為函數(shù)式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。個(gè)人理解不知道對(duì)不對(duì)延遲執(zhí)行柯里化的另一個(gè)應(yīng)用場(chǎng)景是延遲執(zhí)行。不斷的柯里化,累積傳入的參數(shù),最后執(zhí)行。 作為函數(shù)式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 這里可以對(duì)照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡介 柯里化(Currying),又稱部分求值(Partial Evalu...
摘要:如果你對(duì)函數(shù)式編程有一定了解,函數(shù)柯里化是不可或缺的,利用函數(shù)柯里化,可以在開發(fā)中非常優(yōu)雅的處理復(fù)雜邏輯。同樣先看簡單版本的方法,以方法為例,代碼來自高級(jí)程序設(shè)計(jì)加強(qiáng)版實(shí)現(xiàn)上面函數(shù),可以換成任何其他函數(shù),經(jīng)過函數(shù)處理,都可以轉(zhuǎn)成柯里化函數(shù)。 我們經(jīng)常說在Javascript語言中,函數(shù)是一等公民,它們本質(zhì)上是十分簡單和過程化的。可以利用函數(shù),進(jìn)行一些簡單的數(shù)據(jù)處理,return 結(jié)果,...
摘要:函數(shù)被轉(zhuǎn)化之后得到柯里化函數(shù),能夠處理的所有剩余參數(shù)。因此柯里化也被稱為部分求值。那么函數(shù)的柯里化函數(shù)則可以如下因此下面的運(yùn)算方式是等價(jià)的。而這里對(duì)于函數(shù)參數(shù)的自由處理,正是柯里化的核心所在。額外知識(shí)補(bǔ)充無限參數(shù)的柯里化。 showImg(https://segmentfault.com/img/remote/1460000008493346); 柯里化是函數(shù)的一個(gè)比較高級(jí)的應(yīng)用,想要...
閱讀 3206·2023-04-26 03:06
閱讀 3694·2021-11-22 09:34
閱讀 1142·2021-10-08 10:05
閱讀 3041·2021-09-22 15:53
閱讀 3543·2021-09-14 18:05
閱讀 1409·2021-08-05 09:56
閱讀 1906·2019-08-30 15:56
閱讀 2133·2019-08-29 11:02