我們依舊從需求入手,只有知道我們要幹嘛,才能一步步引導我們堆砌出萬丈高樓。
先看下面的**:
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 ...