函式柯里化(curry)

2021-10-19 09:19:13 字數 1372 閱讀 7047

我們依舊從需求入手,只有知道我們要幹嘛,才能一步步引導我們堆砌出萬丈高樓。

先看下面的**:

function

add(x,y)

console.

log(

add(3,

1))//4

如果我們想這樣執行add(3)(1)也能輸出4,我們該怎麼做.我們從這個函式呼叫可以知道,函式呼叫了兩次,並且呼叫第一次後返回的是函式才能再呼叫,第一次呼叫傳入了引數,第二次呼叫也傳入了引數,並把兩次傳入的引數加起來了。因此我們有:

function

add(x)

} console.

log(

add(3)

(1))

//4

延伸到我們另乙個需求,我們假設let testnumber=regnumber(/\d+/),然後testnumber(『123abd』),testnumber(『abc』)來判斷傳入的引數是不是滿足正則,明顯真的能實現這樣的函式的話,好處是,我們只要寫一次正則判斷,後面就不用寫了,很方便。依據這個需求我們可以這樣寫:

function

regnumber

(reg,str)

}let testnumber=

regnumber

(/\d+/g

) console.

log(

testnumber

('123abc'))

//true

console.

log(

testnumber

('abc'))

//false

回到前面的add函式,如果我們想呼叫多少次就多少個相加呢,比如add(1)(2)(3)(4)…要達到1+2+3+…加到想要的效果我們應該怎麼做呢,這明顯是呼叫了乙個函式之後又返回乙個函式,因此我們可以定義乙個函式返回自己,最後用tostring隱式轉換的特性,當最後執行時隱式轉換,並計算最終的值返回,**如下:

function

add(

) _adder.

tostring

=function()

);}return _adder

}console.

log(

add(1)

(2)(

3))//6

到這裡我們好像都沒有說過什麼是柯里化,從上面我們可以看出,柯里化有呼叫的時候可以別的函式不一樣,它是乙個個的呼叫的,形容f(x)(y)(z)…這種。所以今後看到這樣呼叫函式的相比是運用裡柯里化,而函式內部可可想到一直return 回函式,最後乙個return就是想要的結果。

函式柯里化 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

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

函式柯里化 curry

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