BFE.dev前端刷題1 - 實現curry()

bfe.dev 是一個針對前端的刷題網站,像是前端的LeetCode。

該系列文章是我在上面的刷題日記。前端

題目 1

實現curry()   bigfrontend.dev/problem/imp…app

分析

比較基礎的題目了。首先看一下examplefrontend

const curriedJoin = curry(join)

curriedJoin(1, 2, 3) // '1_2_3'

curriedJoin(1)(2, 3) // '1_2_3'
複製代碼

也就是說 curry() 須要返回一個function,這個function接受任意數量的參數,而且網站

1. 若是參數夠了,就執行原本的functionthis

2. 若是參數不夠,就」保存」下參數,返回一個新的function。 這個function含有「保存」好的參數。這個能夠經過 Function.prototype.bind 來實現。spa

代碼

這個題目比較簡單,直接放上代碼。prototype

function curry(func) {
  return function curried(...args) {
    // 1\. if enough args, call func 
    // 2\. if not enough, bind the args and wait for new one
    if (args.length >= func.length) {
      return func.apply(this, args)
    } else {
      return curried.bind(this, ...args)
    }
  }
}
複製代碼

注意 curried.bind(this, ...args) 的實現。code

順利passrem

最後

這個題目比較簡單了。有興趣能夠去 bfe.dev上試一試。get

與此題相關的第二題就沒這麼簡單了,敬請期待下一篇文章,感謝閱讀 ?

相關文章
相關標籤/搜索