/**
* 普通的函式
*/function
add(x, y)
console.
log(
add(1,
2))
加入我們需要傳遞更多的引數的話,我們需要把函式的形參再增加,這樣的話會顯得更加麻煩。
/**
* 函式柯里化後的函式
*/function
curringadd
(x)}
console.
log(
curringadd(2
)(3)
)
我們不難發現在這個函式裡面,用到了閉包,使用了其他函式作用域的引數,但是現在這個函式只能實現兩個數相加,要是有三個引數呢?我們得在內部返回的函式裡面再去新增乙個函式,並且返回,這樣就大大增加了**的長度,並且大部分的**都是冗餘的,這個時候,我們就可以利用改良後的柯里化函式去進行解決了。
function
curring()
func.tostring = func.
valueof
=function()
)}return func
}console.
log(
curring(1
,2)(
4,3)
.valueof()
)// 10
這樣就可以實現我們的加法函式了,並且可以傳遞進去多個引數,這樣我們的乙個加法柯里化函式就實現了,但是我們發現了乙個缺點,就是這個函式只能用於加法運算,如果我們要的是乘法運算呢?這又怎麼做呢?別急,還有方法,就是我們在最外部的函式中接收乙個引數,這個引數是乙個函式fn
,然後在接下來傳遞的引數把這些引數傳遞到這個fn
函式中,然後由fn函式進行運算,這樣就可以實現不同函式之間的通用柯里化函式了,來看看**。
/**
* 自己實現的柯里化函式
*/function
mycurring
(fn)
func.tostring = func.
valueof
=function()
return func
}}/*** 加法函式
*/const
add=
function()
)}const mycurry =
mycurring
(add)
console.
log(
mycurry(1
,2)(
4)(5
,6).
valueof()
)
這樣我們就可以在這個柯里化函式中實現不同運算函式了,這樣是不是很方便呢! 函式柯里化
在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。在直覺上,柯里化聲稱 如果你固定某些引數,你將得到接受餘下引數的乙個函式 柯里化實現的原理 在函式式程式語言中,將函式可以當做物件傳遞呼...
函式柯里化
curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...
函式柯里化
curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...