摘要:這是一道朋友在群里發(fā)的一道題,我之前不是很懂柯里化,就自己試著寫了一下,不知道算不算柯里化,望指教下面是題目寫好之后一下代碼可以正常運(yùn)行輸入正確我自己的代碼我用到了以下知識(shí)點(diǎn)擴(kuò)展運(yùn)算符傳參和擴(kuò)展運(yùn)算符相關(guān)的數(shù)組操作。
這是一道朋友在群里發(fā)的一道題,我之前不是很懂柯里化,就自己試著寫了一下,不知道算不算柯里化,望指教~ 下面是題目:
function curry() { // your code..... } ================================ //寫好之后一下代碼可以正常運(yùn)行輸入正確 function add(a, b, c) { return a + b + c; } let addEx = curry(add); console.log(addEx(1,2,3) === 6); console.log(addEx(1,2)(3) === 6); console.log(addEx(1)(2,3) ===6); console.log(addEx(1)(2)(3)===6); function multi(a, b, c, d) { return a * b * c * d } const multiEx = curry(multi) console.log(multiEx(2, 3, 4, 5) === 120) //=>true console.log(multiEx(2, 3, 4)(5) === 120) //=>true console.log(multiEx(2, 3)(4, 5) === 120) //=>true console.log(multiEx(2)(3)(4)(5) === 120) //=>true我自己的代碼:
function curry(fn) { let len = fn.length; let arr = []; let getCurry = function () { return function () { let next = [...arguments]; if (len !== arr.length + next.length) { arr.push(...next); return getCurry(); } else { let result = fn.apply(null, [...arr,...next]) arr = [] return result } } } return getCurry() }
我用到了以下知識(shí)點(diǎn):
擴(kuò)展運(yùn)算符傳參和擴(kuò)展運(yùn)算符相關(guān)的數(shù)組操作。
由于是連環(huán)調(diào)用函數(shù),我用所有調(diào)用函數(shù)的參數(shù)個(gè)數(shù)來判斷。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94467.html
摘要:忍者秘籍一書中,對(duì)于柯里化的定義如下在一個(gè)函數(shù)中首先填充幾個(gè)參數(shù)然后再返回一個(gè)新函數(shù)的技術(shù)稱為柯里化。回到我們的題目本身,其實(shí)根據(jù)測(cè)試用例我們可以發(fā)現(xiàn),函數(shù)的要求就是接受單一函數(shù),例如但是與柯里化不同之處在于,柯里化返回的一個(gè)新函數(shù)。 歡迎大家再一次來到我的文章專欄:從面試題中我們能學(xué)到什么,各位同行小伙伴是否已經(jīng)開始了悠閑的春節(jié)假期呢?在這里提前祝大家雞年大吉吧~哈哈,之前有人說...
摘要:函數(shù)柯里化在函數(shù)式編程中,函數(shù)是一等公民。函數(shù)柯里化的主要作用和特點(diǎn)就是參數(shù)復(fù)用提前返回和延遲執(zhí)行??赡茉趯?shí)際應(yīng)用場(chǎng)景中,很少使用函數(shù)柯里化的解決方案,但是了解認(rèn)識(shí)函數(shù)柯里化對(duì)自身的提升還是有幫助的。 最近在整理面試資源的時(shí)候,發(fā)現(xiàn)一道有意思的題目,所以就記錄下來。 題目 如何實(shí)現(xiàn) multi(2)(3)(4)=24? 首先來分析下這道題,實(shí)現(xiàn)一個(gè) multi 函數(shù)并依次傳入?yún)?shù)執(zhí)行,...
摘要:函數(shù)柯里化關(guān)于函數(shù)柯里化的問題最初是在忍者秘籍中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題實(shí)現(xiàn)一個(gè)函數(shù),使得如下斷言能夠能夠通過簡單說就是實(shí)現(xiàn)一個(gè)求值函數(shù),能夠?qū)⑺袇?shù)相加得出結(jié)果。方法返回一個(gè)表示該對(duì)象的字符串。 函數(shù)柯里化 ??關(guān)于函數(shù)柯里化的問題最初是在《JavaScript忍者秘籍》中講閉包的部分中看到的,相信很多同學(xué)見過這樣一道和柯里化有關(guān)的面試題:...
摘要:原題如下寫一個(gè)方法,當(dāng)使用下面的語法調(diào)用時(shí),能正常工作這道題要考察的,就是對(duì)函數(shù)柯里化的理解。當(dāng)參數(shù)只有一個(gè)的時(shí)候,進(jìn)行柯里化的處理。這其實(shí)就是函數(shù)柯里化的簡單應(yīng)用。 showImg(https://segmentfault.com/img/bVbopGm?w=620&h=350); 前言 這是前端面試題系列的第 6 篇,你可能錯(cuò)過了前面的篇章,可以在這里找到: ES6 中箭頭函數(shù)的...
摘要:題目發(fā)現(xiàn)一道有意思的面試題如何實(shí)現(xiàn)首先簡單分析一下,我們就能發(fā)現(xiàn)這是一個(gè)函數(shù)傳值次得到。簡單實(shí)現(xiàn)利用閉包,執(zhí)行函數(shù)時(shí)一個(gè)匿名函數(shù),用于最終返回結(jié)果。當(dāng)然,這個(gè)方法有個(gè)明顯缺陷,就是如果函數(shù)變成,我們就又要手動(dòng)嵌套一層。 題目 發(fā)現(xiàn)一道有意思的面試題:如何實(shí)現(xiàn) add(1)(2)(3)=6 ? 首先簡單分析一下,我們就能發(fā)現(xiàn)這是一個(gè)函數(shù)傳值 return3次得到6 。 簡單實(shí)現(xiàn) func...
閱讀 1216·2021-09-03 10:44
閱讀 617·2019-08-30 13:13
閱讀 2808·2019-08-30 13:11
閱讀 1976·2019-08-30 12:59
閱讀 1043·2019-08-29 15:32
閱讀 1607·2019-08-29 15:25
閱讀 1003·2019-08-29 12:24
閱讀 1290·2019-08-27 10:58