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上试一试。
与此题相关的第二题就没这么简单了,敬请期待下一篇文章,感谢阅读 ?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。