我想使这种语法成为可能:
var a = add(2)(3); //5
Run Code Online (Sandbox Code Playgroud)
根据我在http://dmitry.baranovskiy.com/post/31797647上读到的内容
我不知道如何使它成为可能.
我的一个朋友要求我编写一个适用于这两种情况的函数
add(2,4) // 6
add(2)(4) // 6
Run Code Online (Sandbox Code Playgroud)
我的本能是写一个返回自己的add()函数,但我不确定我是朝着正确的方向前进.这失败了.
function add(num1, num2){
if (num1 && num2){
return num1 + num2;
} else {
return this;
}
}
alert(add(1)(2));
Run Code Online (Sandbox Code Playgroud)
所以我开始阅读返回其他函数或返回自己的函数.
我会继续尝试,但如果有人有一个光滑的解决方案,我很乐意看到它!
使用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)
但是,有人告诉我,它的风格并不是很"实用".
如何实现用于乘以任意数量的数字的锁定功能。
调用示例:
multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)
为了完成这个任务,需要重新定义toString内部函数的方法,该方法应该返回累积结果,但我有结果NaN。
multiply(1)(2)(3)(4)(5) // 120
Run Code Online (Sandbox Code Playgroud)