作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在最近的一次采访中,我被要求创建一个如下代码片段中描述的函数
add(2,3,4)(5,6)(7,8); // Should yield 35
如上面的代码片段所示,有一个名为“add”的函数,可以无限地调用它,并且每次调用可以容纳无限的参数。最后它应该返回所有调用中所有参数的总和。
下面是一个部分解决方案,需要不带参数的最终调用。
/**
* @description
* infiniteAdd(2,3)(4,5)(6,7)()
* Above operation yields 27
*/
function infiniteAdd() {
// Creating closure for subsequent function invocations
var prevArgs = Array.prototype.slice.call(arguments);
return function() {
var currArgs = Array.prototype.concat.call(prevArgs, Array.prototype.slice.call(arguments));
if (arguments.length < 1) {
// if no arguments than calculate sum
return Array.prototype.reduce.call(currArgs,
function(acc, curr) {
return acc + curr;
}
);
}
// Recursively call the main function till no more arguments provided
return infiniteAdd.apply(null, currArgs);
}
}
console.log(infiniteAdd(2, 3)(4, 5)(6, 7)());
最佳答案
您可以像下面这样实现加法的柯里化(Currying)函数
function addition(...args) {
return args.reduce((a, b) => a + b)
}
function parseAdd(fn) {
var newFn = fn.bind(null);
function cal(...args) {
newFn = newFn.bind(null, ...args);
return cal;
}
cal.toString = () => newFn();
return (...arg) => {
newFn = fn.bind(null);
return cal(...arg)
}
}
var add = parseAdd(addition)
console.log(add(2, 3, 4)(5, 6)(7, 8))
关于Javascript无限柯里化(Currying)加法支持无限调用和每次调用无限参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505619/
我是一名优秀的程序员,十分优秀!