我在采访中被问到这个问题。
对于柯里化(Currying)风格的 sum(2)(3)
sum(a) {
return (b) {
return a + b;
}
}
求和 (2, 3)
sum(a, b) {
return a + b;
}
有没有可以同时使用的通用函数
最佳答案
这是一个可以从任何非柯里化(Currying)函数创建广义柯里化(Currying)函数的函数。它是在不使用任何 ECMAScript 6 语法的情况下编写的。无论原始函数期望的参数数量或提供给每个部分应用程序的参数数量如何,这都有效。
function sum (a, b) {
return a + b;
}
function product (a, b, c) {
return a * b * c;
}
function curry (fn) {
return function partial () {
return arguments.length >= fn.length
? fn.apply(this, arguments)
: partial.bind.apply(partial, [this].concat(Array.prototype.slice.call(arguments)));
};
}
var s = curry(sum);
console.log(s(1, 2));
console.log(s(1)(2));
console.log(s()()(1)()()(2));
var p = curry(product);
console.log(p(2, 3, 4));
console.log(p(2)(3)(4));
console.log(p()()(2)()()(3, 4));
关于javascript - sum(2)(3) 和 sum(2, 3) 两者的共同解决方案是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58191104/