前端練習19 函式柯里化

2021-09-03 07:41:23 字數 1102 閱讀 6041

通過length屬性獲得函式的引數個數

柯里化的概念和實現

函式式程式設計當中有乙個非常重要的概念就是函式柯里化。乙個接受任意多個引數的函式,如果執行的時候傳入的引數不足,那麼它會返回新的函式,新的函式會接受剩餘的引數,直到所有引數都傳入才執行操作。這種技術就叫柯里化。

請你完成curry函式,它可以把任意的函式進行柯里化,效果如下:

const f = (a, b, c d) => 

const curried = curry(f)

curried(a, b, c, d)

curried(a, b, c)(d)

curried(a)(b, c, d)

curried(a, b)(c, d)

curried(a)(b, c)(d)

curried(a)(b)(c, d)

curried(a, b)(c)(d)

// ...

// 這些函式執行結果都一樣

// 經典加法例子

const add = curry((a, b) => a + b)

const add1 = add(1)

add1(1) // => 2

add1(2) // => 3

add1(3) // => 4

首先肯定是要通過判斷函式的length屬性判斷函式當前引數的個數。

curry函式的返回值一定是乙個函式,函式接受不定個數的引數,如果引數個數和傳入curry函式的個數相等,就執行傳入的引數,否則返回繼續返回乙個函式,並傳入當前的引數

我一開始犯的錯誤是,當引數個數不等時,我直接將fn.bind(null, ...argus)作為結果反悔了,這樣的問題是不能將後續的引數繼續傳入,應該是將fn.bind(null, ...argus)作為新的curry函式的引數傳進去,形成乙個迴圈呼叫才可以。

const curry = fn =>  else 

}};

函式柯里化

在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。在直覺上,柯里化聲稱 如果你固定某些引數,你將得到接受餘下引數的乙個函式 柯里化實現的原理 在函式式程式語言中,將函式可以當做物件傳遞呼...

函式柯里化

curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...

函式柯里化

curry 的概念 只傳遞給函式一部分引數來呼叫它,讓它返回乙個函式去處理剩下的引數先看乙個簡單例子,add函式接受 2 個引數 或者多個 addx函式接受 1 個引數。換而言之,所謂 柯里化 就是把乙個多引數的函式,轉化為單引數函式。將乙個函式轉換為乙個新的函式 非柯里化 function add...