我目前正在处理个人时间的编程问题,要求我创建一个可以这种方式调用的javascript函数.
add(1) // 1
add(1)(2) // 3
add(1)(2)(3); // 6
add(1)(2)(3)(4); // 10
add(1)(2)(3)(4)(5); // 15
Run Code Online (Sandbox Code Playgroud)
我弄清楚的是如何使它在最后一次调用时返回一个值.
例如,为了add(1)(2)工作,那么add(1)必须返回一个函数,但是根据指令add(1)自己调用时会返回1.
我假设你能克服这个问题的一种方法是弄清楚add函数被连续多少次被调用,但我想不出有办法实现这一点.有没有人有任何可以指出我正确方向的提示?
使用ES5,你如何理解一个带有无限参数的函数.
function add(a, b, c) {
return a + b + c;
}
Run Code Online (Sandbox Code Playgroud)
上面的函数只需要三个参数,但我们希望我们的curried版本能够获取无限参数.
因此,以下所有测试用例都应该通过:
var test = add(1);
test(2); //should return 3
test(2,3); //should return 6
test(4,5,6); //should return 16
Run Code Online (Sandbox Code Playgroud)
这是我提出的解决方案:
function add(a, b, c) {
var args = Array.prototype.slice.call(arguments);
return function () {
var secondArgs = Array.prototype.slice.call(arguments);
var totalArguments = secondArgs.concat(args);
var sum = 0;
for (i = 0; i < totalArguments.length; i++) {
sum += totalArguments[0];
}
return sum;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,有人告诉我,它的风格并不是很"实用".
javascript问题添加无限数字,末尾没有空括号
我试过这个:
const Sum = function (a) {
function innerFunc (b) {
console.log("B", b)
return b ? Sum(a + b) : a;
}
}
console.log(Sum(2)(3)(4))
Run Code Online (Sandbox Code Playgroud)
但它适用于 console.log(Sum(2)(3)(4)()) 即最后一个空括号,有没有办法通过更改函数来做到这一点,以便没有空括号的控制台日志给出正确的结果结果,目前它抛出一个错误,指出 Sum 不是函数
只是一个奇怪的问题.我想创建一个可以处理无限"层"的函数?make add(2)(3),add(1)(2)(3)...(10)all works.
有任何想法吗?