js函式柯里化

2021-10-03 19:28:51 字數 2247 閱讀 1420

函式柯里化(currying) 是把接受多個引數的函式變換成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回接受餘下的引數而且返回結果的新函式的技術

高階函式:

//普通的函式

function

add(x, y)

add(1,

2)//3//柯里化後的函式

function

curryingadd

(x)}

curryingadd(1

)(2)

//3

函式柯里化是將原來接受兩個引數的函式變成新的接受乙個引數的函式的過程,新的函式返回乙個以原有第二個引數為引數的函式,這些函式不會立即求值,而是通過閉包的方式把傳入的引數儲存起來,直到真正需要的時候才會求值,減少了**的冗餘,實現函式的復用,是 js 函式式程式設計的一項重要應用

//正規表示式匹配驗證函式

//普通的函式

function

checktext

(reg, text)

//匹配數字

checktext

(/\d+/g

,123

)//true

checktext

(/\d+/g

,'abc'

)//false

//匹配字母

checktext

(/[a-z]+/g

,123

)//false

checktext

(/[a-z]+/g

,'abc'

)//true

//柯里化後的函式

function

curryingchecktext

(reg)

}//匹配數字函式

let isnumber =

curryingchecktext

(/\d+/g

)//匹配字母函式

let isletter =

curryingchecktext

(/[a-z]+/g

)//實現匹配函式復用

isnumber

(123

)//true

isnumber

('abc'

)//false

isletter

(123

)//false

isletter

('abc'

)//true

使用 lodash.js 工具庫的 _.curry 方法
//引入lodash工具庫

"">

<

/script>

function

sum(a, b, c)

//使用lodash工具庫的_.curry方法實現柯里化函式

let currysum = _.

curry

(sum)

console.

log(

currysum(1

,2,3

))//6 console.

log(

currysum(1

,2)(

3))//6

console.

log(

currysum(1

)(2)

(3))

//6<

/script>

建立函式柯里化輔助函式

建立乙個函式柯里化輔助函式 _curry(func),該函式將對接收多個引數的函式 func 執行柯里化

//建立乙個函式柯里化輔助函式_curry()

function

_curry

(func)

else}}

}function

sum(a, b, c)

//使用_curry()函式實現柯里化函式

let currysum =

_curry

(sum)

console.

log(

currysum(1

,2,3

))//6console.

log(

currysum(1

,2)(

3))//6

console.

log(

currysum(1

)(2)

(3))

//6

js函式柯里化

什麼是函式柯里化?在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。這個技術由 christopher strachey 以邏輯學家 haskell curry 命名的,儘管它是 mos...

js 函式柯里化

函式柯里化的主要目的就是為了減少函式傳參,同時將一些固定引數私有化。下面展示一段非常簡單計算圓面積的 來說明函式柯里化的原理 circle函式,接受半徑r和 function circle r,p 通過函式柯里化來簡化circle函式,只傳入半徑就能計算出面積 不管怎麼樣,是不會變的,因此我們將他寫...

js 函式柯里化

函式柯里化的主要目的就是為了減少函式傳參,同時將一些固定引數私有化。下面展示一段非常簡單計算圓面積的 來說明函式柯里化的原理 circle函式,接受半徑r和 function circle r,p 通過函式柯里化來簡化circle函式,只傳入半徑就能計算出面積 不管怎麼樣,是不會變的,因此我們將他寫...