专栏首页BFE.dev前端刷题日记BFE.dev前端刷题1 - 实现curry()
原创

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上试一试。

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BFE.dev前端刷题2 - 实现curry() 并支持placeholder

    实现curry() 并支持placeholder. implement curry() with placeholder support

    JSer
  • BFE.dev前端刷题 23. 实现一个sum()方法

    首先完成function的部分。上述的1和2告诉我们需要用一个变量来存储当前的和,这个“和”需要可以在返回的function中可以使用。为了简单,可以直接当作第...

    JSer
  • BFE.dev前端刷题#32. 实现`Promise.all()`

    fulfill的data需要存在一个数组里,但是promise的fulfill时机未知,先后顺序不定,所以不能push,而是利用index来放置数据到正确的位置...

    JSer
  • python基础类型(三):可调用类型——函数和方法

    在 python中所有的类型都是对象,即使是 int,float这些其他语言中的基础类型在 python中也是以对象的形式存在,函数和方法也不例外。

    渔父歌
  • 早读《TypeScript Generics Too Hard?》

    最近在阅读 Redux源码,这才发现它用 TypeScript 重写了,稍微有一些绕脑,因为:

    icepy
  • 佳能6D相机怎么设置M档和定时?

    佳能6D相机在M档的时候才能拍出理想的相片,该怎么设置到m档呢?下面我们就来看看详细的教程。

    砸漏
  • Spring AOP 注解方式实现的一些“坑”

    使用之前还是先过一下官方文档吧,至少可以少走弯路,不用担心英文读不懂,其实只看代码例子就能理解很多问题!

    飞奔去旅行
  • Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

      Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息。

    Rekent
  • Make

    ###一、make的功能: make是一个用来维护程序模块关系和生产可执行文件的工具,他可以根据程序修改的情况重新编译链接生成的中间代码或最终的可执行文件。执行...

    用户1214695
  • phantomjs小试

    简单来说,phantomjs就是一个运行在node上的webkit内核,支持DOM渲染,css选择器,Canvas,SVG等,在浏览器上能做的事情,理论上,ph...

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券