bfe.dev是一个针对前端的刷题网站,像是前端的LeetCode。该系列文章是我在上面的刷题日记。
实现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 删除。
我来说两句