function add() { let args = Array.from(arguments) //获取函数参数,并转换为数组
let inner = function () {
// 定义inner函数,将后面的参数添加进去
args.push(...arguments)
return inner // 内部递归调用 inner
}
inner.toString = function () {
//返回结果是一个字符串函数,因为内部调用了toString,此处重新定义toString
return args.reduce(function (prev, cur) {
return prev + cur
})
}
return inner // 返回 inner 函数
}
const res = add(1, 2, 3)(2, 4) - 0 // 浏览器貌似不会单独执行toString,通过 - 0 隐式调用toString
console.log(res) // 12