我以这种方式实现了curry
功能:
function curry (fn) {
var slice = Array.prototype.slice,
args = slice.apply(arguments, [1]);
return function () {
fn.apply(null, args.concat(slice.apply(arguments)));
};
}
当我使用上述功能执行以下操作时
function add (x, y) {
return x + y;
}
var inc = curry(add, 1);
console.log(inc(10));
记录undefined
。 11不是预期的产出吗?我的代码出了什么问题?
注意:在console.log(x, y)
功能日志add
中使用1 10
。我不明白为什么它会返回undefined
。
答案 0 :(得分:13)
你的咖喱功能中缺少return
。
即
return function () {
return fn.apply(null, args.concat(slice.apply(arguments)));
};
这似乎有效:)
答案 1 :(得分:11)
这是咖喱功能的一个例子:
function curry(func) {
var initial_args = [].slice.apply(arguments, [1]);
var func_args_length = func.length;
function curried(args) {
if (args.length >= func_args_length) {
return func.apply(null, args);
}
return function () {
return curried(args.concat([].slice.apply(arguments)));
};
}
return curried(initial_args);
}
此咖喱功能可创建任何功能的咖喱版本。您可以将参数部分应用于新功能。对于每个部分应用程序,它将返回一个接受其余参数的函数。一旦应用了原始函数的所有参数,它将返回一个值。