函式柯里化

2021-10-22 16:24:43 字數 1411 閱讀 1562

/**

* 普通的函式

*/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...