yizihan / blog

Record
1 stars 0 forks source link

编写一个add()函数,支持对多个参数求和以及多次调用求和 #33

Open yizihan opened 4 years ago

yizihan commented 4 years ago

编写一个add()函数,支持对多个参数求和以及多次调用求和

add(1) // 1
add(1)(2) // 3
add(1, 2)(3, 4, 5)(6) // 21
function add(...args) {
  let arr = args
  // fn() 主要是拼接参数并返回自身
  function fn(...newArgs) {
    arr = [...args, ...newArgs]
    return fn
  }
  // toString()函数会在打印函数的时候调用
  // valueOf()函数会在获取函数原始值时调用(赋值)
  fn.toString = fn.valueOf = function () {
    return arr.reduce((acc, cur) => acc + parseInt(cur))
  }
  // 返回函数,保证连续调用
  return fn
}
var num1 = add(1)(2)
// 调用fn.toString()
console.log(num1)