先看定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
function add() {
var _args = Array.prototype.slice.call(arguments, 0);//①
var _adder = function () {
_args.push(...arguments);
return _adder;
};
_adder.toString = function () {
return _args.reduce((pre,curr)=>{
return pre+curr;
},0)
}//②
return _adder;
}
console.log(add(1,2,3))
console.log(add(1)(2)(3));
①因为arguments本身不是一个数组,所以他没有slice的方法,所以调用数组原型链上的slice方法。
②函数本身会发生隐士类型转换,默认会调用toString方法,所以在这改变他中的toString方法。