我们都知道js柯里化如何实现,但是最终实现的效果一般是酱紫的:
sum(1)(2)(3)(4)()
但是后面多了一个()总是很不爽,也有不带()的实现,不过参数个数是确定的,所以,我想问:
console.log(sum(1)(2)(3))
这种直接输出6的怎么实现?注意参数可能更多也可能更少0.0
我们都知道js柯里化如何实现,但是最终实现的效果一般是酱紫的:
sum(1)(2)(3)(4)()
但是后面多了一个()总是很不爽,也有不带()的实现,不过参数个数是确定的,所以,我想问:
console.log(sum(1)(2)(3))
这种直接输出6的怎么实现?注意参数可能更多也可能更少0.0
你想sum(1)(2)(3)
直接返回6,这不难实现。
然后你又想sum(1)(2)(3)(4)
返回的是10,那就不行了。
因为你前面三次调用已经返回6了,然后你的代码就是6(4)了,这显然不行。
所以必须有个地方做区分,要不就像第一种一样以不传参的方式取得结果,要不就只能固定次数了。
function sum(x, y) {
if (typeof y !== 'undefined') {
return sum.apply(null, [x + y].concat([].slice.call(arguments, 2)));
} else {
var fn = function() {
return sum.apply(null, [x].concat([].slice.call(arguments)));
};
fn.toString = function() {
return x;
};
return fn;
}
}
sum(1, 2, 3, 4, 5)
sum(1)(2)(3)(4)(5)
sum(1, 2)(3)(4, 5)
sum(1,2)(3, 4, 5)
sum(1, 2, 3, 4)(5)
输出结果都是15
27 回答13k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.7k 阅读
4 回答2.3k 阅读✓ 已解决
问道js题目 编写add函数 然后 add(1)(2)(3)(4) 输出10 再考虑拓展性