经典面试题:实现add(1)(2)(3)(4) = 10;add(1)(1,2,3)(2) = 9;
- 对于add(3)(4) = 7,可以使用如下简单方法实现
function add(x){
return function(y){
return x + y;
}
}
但是如果参数多了的话,就会嵌套很多层,这显然是不合理的。
- 这里介绍一个简单的方法,就是利用arguments将函数的参数转化为数组,然后利用toString隐形转换的方法对数据进行求和。
- 代码
function add(){
// 将传入的补丁参数转为数组对象
var _args = Array.prototype.slice.call(arguments);
// var _args = Array.from(arguments)
// console.log(_args);
var _adder = function(){
_args.push(...arguments)
return _adder
}
// toString隐形转换的特性
_adder.toString = function(){
return _args.reduce((a,b) =>{
return a + b;
},0)
}
return _adder;
}
console.log(add(1)(2)(3)(4))
console.log(add(1)(1,2,3)(2))
这种实现方法是在B站看视频学习到的,在这里记录一下,当作写笔记