手寫函式柯里化(Curry) 原理剖析

2021-10-02 02:02:30 字數 1744 閱讀 8638

前端使用柯里化的用途主要就是簡化**結構,提高系統的維護性,乙個方法,只有乙個引數,強制了功能的單一性,很自然就做到了功能內聚,降低耦合。

降低**的重複,提高**的適用性。 (在後面實現應用部分 ajax 會體現出來呼叫時的**精簡)

呼叫形式

function add(a,b,c,d);

var newadd = curry(add); //將add函式柯里化 經過柯理化返回乙個新的函式

//柯里化之後的newadd函式執行方式,傳入剩餘的引數。

newadd(1)(2)(3)(4);

newadd(1,2)(3,4);

newadd(1,2,3)(4);

newadd(1,2,3,4);

newadd(1)(2,3,4);

newadd(1)(2,3)(4);

函式柯理化的準備

//柯里化就是期望下一次能夠把所有的引數傳入完畢。

function fixedparamscurry(fn)

}

var newadd = fixedparamscurry(add,1); //傳入引數。這裡是傳入了1個引數

console.log(newadd(2,3,4)); //此處必須要將剩餘的引數填滿。這裡將剩餘的3個引數傳入。(期望這一次把引數全部傳入完畢)

柯理化的具體實現

期待下一次將引數補齊

function curry(fn, length)else

}}

//此處ajax只是示意而已

//post www.test1.com 'name=djl&age=22'

//post www.test1.com 'key=111'

//post www.test2.com 'name=djl&age=22'

//post www.test2.com 'key=222'

function ajax(method, url, data)

//場景:引數的**重複性太高,每次都要寫重複的引數

ajax('post', 'www.test1.com', 'name=djl&age=22');

ajax('post', 'www.test1.com', 'key=111');

ajax('post', 'www.test2.com', 'name=djl&age=22');

ajax('post', 'www.test2.com', 'key=222');

//使用柯里化簡化**:針對『post』的引數傳入省略

var ajaxcurry = curry(ajax);

var postajax = ajaxcurry('post');

postajax('www.test1.com', 'name=djl&age=22');

postajax('www.test2.com', 'name=djl&age=22');

//還可以再繼續細分,針對網域名稱『www.test1.com』省略引數

var test1postajax = curry(postajax);

test1postajax('name=djl&age=22');

test1postajax('key=111');

函式柯里化 curry

一 函式柯里化的特性 1 引數復用 ajax 示例一 function ajax type,url,data var ajaxcurry curry ajax 以get請求為例 示例二 function add a,b,c const curryadd function a console.log ...

函式柯里化(curry)

我們依舊從需求入手,只有知道我們要幹嘛,才能一步步引導我們堆砌出萬丈高樓。先看下面的 function add x,y console.log add 3,1 4如果我們想這樣執行add 3 1 也能輸出4,我們該怎麼做.我們從這個函式呼叫可以知道,函式呼叫了兩次,並且呼叫第一次後返回的是函式才能再...

函式柯里化 curry

1 函式程式設計中,接受多個引數的函式都可以轉化為接受單個引數的函式,這個轉化過程就叫柯里 化 2 柯里化就是證明了函式只需要乙個引數而已。其實我們剛才的學習過程中,已經涉及到了柯里 化操作。3 不用設立柯里化存在的意義這樣的命題。柯里化就是以函式為主體這種思想發展的必然產生的 結果。即 柯里化是面...