- 编写一个add()函数,能正常执行下面的代码,并且能在控制台输出注释中的数字
console.log(add(1, 2))
console.log(add(1, 2, 3))
console.log(add(1)(2))
console.log(add(1)(2)(3))
- add()函数具有多个实参数量,实参数量不定;并且使用了柯里化
- 柯里化是一种部分求值的技术,能把一个完整的函数调用分解成多次函数调用,每次只传入部分参数,返回一个接收剩下参数的函数,直到所有参数传递过去,最后得出结果
- 使用函数内部的arguments对象时,可以将所有输入的参数自动传入arguments对象中,通过数字索引就可以读取到每个实参
- 在函数内部再定义一个函数,在这个函数中合并每次传入的实参,并且返回自身。重写toString()方法
- 当函数被输出的时候才会调用toString()方法,返回计算的结果
function add() {
var temSlice = [].slice,
params = temSlice.apply(arguments);
function currying() {
var arr = temSlice.apply(arguments);
params = params.concat(arr);
return currying;
}
currying.toString = function () {
var result = 0;
params.forEach(function (value) {
result += value;
});
return result;
};
return currying;
}