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

与此题相关的第二题就没这么简单了,敬请期待下一篇文章,感谢阅读 ?

相关文章
相关标签/搜索