BFE.dev前端刷题1 - 实现curry()

时间:2022-07-23
本文章向大家介绍BFE.dev前端刷题1 - 实现curry(),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

bfe.dev是一个针对前端的刷题网站,像是前端的LeetCode。该系列文章是我在上面的刷题日记。

题目 1

实现curry() bigfrontend.dev/problem/imp…

分析

比较基础的题目了。首先看一下example

const curriedJoin = curry(join)

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

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

也就是说 curry() 需要返回一个function,这个function接受任意数量的参数,并且

1. 如果参数够了,就执行本来的function

2. 如果参数不够,就”保存”下参数,返回一个新的function。 这个function含有“保存”好的参数。这个可以通过 Function.prototype.bind 来实现。

代码

这个题目比较简单,直接放上代码。

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) 的实现。

顺利pass!

最后

这个题目比较简单了。有兴趣可以去 bfe.dev上试一试。

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