什么是柯理化?
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
function add() {
// 1. 函数add执行时这条只会执行一次,只收集add函数传进来的第一个参数(第一个括号的参数)
var _args = Array.prototype.slice.call(arguments);
// 2. 当有多个参数时,_add依次被调用并收集所有的参数,利用闭包的特性保存_args
var _add = function () {
_args.push(...arguments);
return _add
}
// 3. 当最后计算结果res的时候会调用这个函数,使用reduce依次将参数求和并返回最终的结果
_add.toString = function () {
_args.reduce(function (a, b) {
return a + b
}, 0)
}
return _add
}
var res = add(1, 2)(3);
console.log(res); //6