最近有看到一些柯里化的文章,怎么说呢,感觉很奇怪。一篇是阿里云的译文,文章末尾给出了这样一个 “curry”:
function curry(fn, ...args) {
return (..._arg) => {
return fn(...args, ..._arg);
}
}
作者前面明明例举了柯里化和部分应用的区别,结果最后说我们实现下柯里化吧,然后写了个部分应用……太假了,我忍不住评论了一下:
然后今天看到我们组欢哥的文章,说实话看了一下开头这段代码我就不太有耐心看下面具体的分析了:
// 定义占位符
var _ = '_';
function magician3 (targetfn, ...preset) {
var numOfArgs = targetfn.length;
var nextPos = 0; // 下一个有效输入位置的索引,可以是'_',也可以是preset的结尾
// 查看是否有足够的有效参数
if (preset.filter(arg=> arg !== _).length === numOfArgs) {
return targetfn.apply(null, preset);
} else {
// 返回'helper'函数
return function (...added) {
// 循环并将added参数添加到preset参数
while(added.length > 0) {